首页 > 编程笔记 > Python笔记 阅读:2

插入排序算法(Python实现,图文并茂)

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

把 n 个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含 1 个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复 n-1 次可完成排序过程。

例如,有一组初始化数组 [8,2,5,9,7],把数组中的数据分成两个区域,已排序区域和未排序区域,初始化的时候所有的数据都处在未排序区域中,已排序区域是空的。

1) 第一轮排序,从未排序区域中随机拿出一个数字,既然是随机,那么我们就获取第一个,然后插入到已排序区域中,如果已排序区域是空,那么就不做比较,默认自身已经是有序的了。


2) 第二轮排序,继续从未排序区域中拿出一个数,插入到已排序区域中,这个时候要遍历已排序区域中的数字遍历做比较,比大比小取决于我们是想升序排还是想倒序排,这里按升序排序。


3) 第三轮排序,排 5。


4) 第四轮排序,排 9。


5) 第五轮排序,排 7。


6) 排序结束。

【实例】 利用插入排序对序列 [11,11,22,33,33,36,39,44,55,66,69,77,88,99] 进行排序。
def insertion_sort(arr):
    """插入排序"""
    # 第一层 for 表示循环插入的遍数
    for i in range(1, len(arr)):
        # 设置当前需要插入的元素
        current = arr[i]
        # 与当前元素比较的比较元素
        pre_index = i - 1
        while pre_index >= 0 and arr[pre_index] > current:
            # 当比较元素大于当前元素则把比较元素后移
            arr[pre_index + 1] = arr[pre_index]
            # 往前选择下一个比较元素
            pre_index -= 1
        # 当比较元素小于当前元素,则将当前元素插入在其后面
        arr[pre_index + 1] = current
    return arr

print('排序后的结果为:')
print(insertion_sort([11, 11, 22, 33, 33, 36, 39, 44, 55, 66, 69, 77, 88, 99]))
运行程序,输出如下:

排序后的结果为:
[11,11,22,33,33,36,39,44,55,66,69,77,88,99]

相关文章