#希尔排序
def shell_sort(alist):
n=len(alist)
gap=n//2
#gap=0之前执行插入算法的次数
while gap>0:#与普通插入算法的区别就是步长
for j in range(gap,n):
i=j
while i>0:
if alist[i]<alist[i-gap]:
alist[i],alist[i-gap]=alist[i-gap],alist[i]
i-=gap
else:
break
gap//=2
#快速排序
def quickSort(alist,first,last):
if first==last:
return
mid_value=alist[first]
low=first
high=last
while low<high:
#high左移
while low<high and alist[high]>=mid_value:
high-=1
alist[low]=alist[high]
while low<high and alist[low]<mid_value:
low+=1
alist[high]=alist[low]
#从循环退出时,low==high
alist[low]=mid_value
#对low左边的数据进行快速排序
quickSort(alist,first,low-1)
#对low右边的数据进行快速排序
quickSort(alist,low+1,last)
if __name__=="__main__":
li=[54,26,92,26,77]
print(li)
quickSort(li,0,len(li)-1)
print(li)