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:插入排序的主要内容,如果未能解决你的问题,请参考以下文章