python 插入排序

import copy #导入深拷贝模块
import random # 导入随机数模块
def insert(list1):
    list2 = copy.deepcopy(list1) #将排序列表拷贝,list1为排序列表,list2为参考列表
 
    for i in range(1,len(list1)): #循环遍历大于0索引,即从1开始

        min = list2[i]
        max = list1[i-1]    
        while min < max:            #比较参考列表i索引的元素 与 排序列表 i-1 索引的元素
            list1[i] = list1[i-1]      
            i -= 1
            if i >= 0 and list1[i]>min: # 判断是否越界
                max = list1[i]

            else:                        #执行插入
                i += 1
                list1[i] = min

                break
    return list1

list1 = [ ]
for i in range(10):   #循环生成一个长度为10,元素在[0,20)之间的范围内
    list1.append(random.randrange(20))
print(insert(list1))

插入排序

思想:将要排序的列表看成两大部分,前面的是已经排序好的元素队伍,后面是要按照大小顺序插入到前面已经排序好的队伍当中未排序队伍,每执行一次程序就增加一个排序好队伍的长度,未排序的队伍的长度就减少一个。(从一开始,将第一个元素当做是排序好的队伍,剩下的元素均看作是未排序好的队伍)

 

pyhton实现方法:

1.利用列表的深拷贝复制一个列表,将一个列表当做排序列表,另一个列表当做是参考列表。


2.从下标索引为1开始,参考列表的索引为i的元素与排序列表的索引为i-1的元素进行
大小的比较,当参考列表的元素小于排序列表的元素时,此时,执行排序列表,将排序列表索引为i-1的元素赋值给下标索引为i的元素,(不用担心i索引的元素被覆盖掉,因为已经深拷贝了一个参考列表)相当于索引i的位置被i-1的元素占据了,此时排序列表索引i-1的元素与i的元素相等,但此时比较还没有结束.

 

3.进行下一轮比较,将排序列表索引为i-2与参考列表索引为i的继续比较大小,若小于,则继续执行上述后移,直到排序列表i-n(i-n>=0)索引的元素不大于参考列表的索引i,此时,将参考列表索引i的元素赋值给i-n-1的位置,这样便实现了一次插入排序

 

4.遍历循环参考列表,就实现了后面的元素插入排序到前面已排序好的列表当中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值