希尔排序
先将整个待排序列根据不同增量间隔依次分割成为若干子序列,分别进行直接插入排序。待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。
1 def shellSort(arr): 2 step=len(arr)//2 3 while step>0: 4 for i in range(step,len(arr)): 5 temp=arr[i] 6 j = i-step 7 while j>=0: 8 if temp<arr[j]: 9 arr[j+step]=arr[j] 10 else: 11 break 12 j-=step 13 arr[j+step]=temp 14 step//=2
********************************************
#下面这种写法与插入排序一致
def shellSort3(arr):
step=len(arr)//2
while step >0:
for i in range(step,len(arr)):
j=i-step
temp=arr[i]
while j>=0 and temp<arr[j]:
arr[j + step] = arr[j]
j-=step
arr[j+step]=temp
step//=2
插入排序
插入排序是通过构建有序序列,将第一个元素自成一个有序序列,而对于剩下未排序的元素通过比较找到合适的位置插入元素来达到排序的目的。
def insertSort(arr): for i in range(1,len(arr)): j=i-1 temp=arr[i] while j>=0 and temp<arr[j]: arr[j+1]=arr[j] j-=1 arr[j+1]=temp