直接插入排序,升序

1.python实现直接插入排序算法

参考动图:

https://ask.qcloudimg.com/http-save/developer-news/fhf3o8po46.gif 

# 直接插入排序,升序
arr = [9, 5, 3, 2, 1, -9, 4]
for i in range(1, len(arr)):  # 外层循环为(n-1)*i*O(1),即为O(n^2)
    j = i
    a = arr[i]
    # 当前为i,逆序则向后移动一位,直到不满足的那个j,退出循环
    while j > 0 and a < arr[j - 1]:  # 一次比较为O(1),内层循环为i*O(1)
        arr[j] = arr[j - 1]  # 所谓插入的实现,其实是本步先后移,跳出内循环后再赋值
        j = j - 1
    arr[j] = a  # 每次赋值为一趟,共n-1趟,每趟向前比较,最多比较i次
print(arr)

2.时间复杂度分析

while j > 0 and a < arr[j - 1]:  # 一次比较为O(1),内层循环为i*O(1)
for i in range(1, len(arr)):  # 外层循环为(n-1)*i*O(1),即为O(n^2)

 3.插入排序分类

直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)

属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置)

猜你喜欢

转载自www.cnblogs.com/sybil-hxl/p/11537639.html