episode46:插入排序

Posted 统计学知识分享平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了episode46:插入排序相关的知识,希望对你有一定的参考价值。

作者:Python爱好者666

链接:https://www.cnblogs.com/wangchunli-blogs/p/9947160.html

1、直接插入排序

直接插入排序原理。

在未排序的序列中,构建一个子排序序列,直至全部数据按照要求排序完成。

将待排序的数,插入到已经排序的序列中合适的位置。

增加一个哨兵,放入待比较值,让他和后面已经排好序的序列比较,插入合适的地方。

2、原理

增加一个哨兵位,每轮比较将待比较数放入。

哨兵依次和待比较的前一个数据比较,大的数靠右移动,找到哨兵中的值插入位置.

每一轮结束后,得到一个从开始到待比较数的位置的一个有序序列。

3、总结

最好情况,正好是升序排列,比较迭代n-1次。

最差情况,正好是降序排列,比较迭代1,2,,.....n-1即n(n-1)/2

使用两层嵌套循环,时间复杂度O(n**2)

稳定排序算法。

使用在小规模数据比较

优化点:

如果比较操作耗时大的话,可以采用二分查找的方式来提高效率。(查找是在已经排序的区域).  if判断加上循环。

4、#插入排序

#思路,增加一个哨兵岗位,数据依次和哨兵岗位比较,大数右移,直到放到合适为止。

 

 

list3 = [3,9,0,1,5,7,2,4,8,6]

nums = [0] + list3

length = len(nums)

count = 0

count_swap = 0

for i in range(2,length):

    nums[0] = nums[i]

    j = i -1  #前一个数的索引

    count += 1

    if nums[j] > nums[0]:

        while nums[j] > nums[0]:  #大数右移

            nums[j+1] = nums[j]   #依次右移

            j -= 1   #右移几次就要减去几次

            count_swap += 1

        nums[j+1] = nums[0] #在插入右侧+1


以上是关于episode46:插入排序的主要内容,如果未能解决你的问题,请参考以下文章

插入排序

Arduino之插入排序法

Arduino之插入排序法

Arduino插入排序法

Arduino之插入排序法二

插入排序史上最经典的实现方式