zoukankan      html  css  js  c++  java
  • 插入排序

    问题

    对一组元素按照从小到大重新排序

    例如:
    27, 33, 28, 4, 2, 26, 13, 35, 8, 14
    排序后:
    2, 4, 8, 13, 14, 26, 27, 28, 33, 35

    插入排序算法:

    1. 从第一个元素开始,该元素可以认为已经被排序
    2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
    3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
    4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    5. 将新元素插入到该位置后
    6. 重复步骤2~5

    Python代码示例

    # 升序
    def insert_sort(alist):
        n=len(alist)
        # 默认第一个元素已经被排序
        if n == 1:
            return alist
        # 从下一个元素开始
        for i in range(1, n):
            for j in range(i, 0,-1):
                # 依次从后循环已排序的元素与取出的元素对比
                if alist[j] < alist[j-1]:
                    # 交换
                    alist[j],alist[j-1]=alist[j-1],alist[j]
        return alist
    
    
    
    alist = [54,26,93,17,77,31,44,55,20]
    insert_sort(alist)
    print(alist)
    

    注意

    如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找插入排序。

  • 相关阅读:
    [leetCode]100.相同的树
    [leetCode]88.合并两个有序数组
    [leetCode]83.删除排序链表中的重复元素
    排序算法总结
    [leetCode]69. x 的平方根
    POJ 1151 Atlantis
    POJ 3468 A Simple Problem with Integers
    SGU 271 Book Pile
    POJ 2970 The lazy programmer
    FZU 2254 英语考试
  • 原文地址:https://www.cnblogs.com/Py00/p/7712793.html
Copyright © 2011-2022 走看看