插入类排序:
每步将一个待排序的记录,按其排序码大小,插到前面已经排序的文件中的适当位置,直到全部插完为止。
1.直接插入排序
1.算法思想:从待排序的第n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。
2.代码:
def insert_sort(array):
n=len(array)
for i in range(1,n):
if array[i]<array[i-1]:
temp=array[i]
index=i #待插入的下标
for j in range (i-1,-1,-1): #从i-1循环到0
if array[j]>temp:
array[j+1]=array[j]
index[j] #记录待插入下标
else:
break
array[index]=temp
return array
2.shell排序(希尔排序):
1.原理:是对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序。
shell排序时,开始时增量比较大,分组较多,每组的记录数目较少,用此,在各组内采用直接插入排序较快,后来增量di逐渐缩小,分组数减少,各组的记录数增多,
但由于按(di-1)分组排序,文件较接近于有序状态,所以新的一趟排序过程较快,因此shell排序在效率上比直接插入排序有较大的改进。
2.代码:
def shellsort(nums):
step=len(nums)//2 #设定步长
while step>0:
for i in range(step,len(nums)):
while i>=step and nums[i-step]>nums[i]: #类似插入排序,当前值与指定步长之间的值比较
符合条件则交换位置
nums[i],nums[i-step]=muns[i-step],mums[i]
i-=step
return nums