python插入排序_插入排序-Python实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值