#插入算法
# def insert_sort(alist):
# i = 1
# for j in range(1,len(alist)):
# i = j
# while i > 0 :
#
# if alist[i]<alist[i-1]:
# alist[i],alist[i-1]=alist[i-1],alist[i]
# i-=1
# else:
# break
#
# if __name__=="__main__":
# li = [54,26,93,17,77,31,44,55,20]
# print(li)
# insert_sort(li)
# print(li)
# 希尔排序
# def shell_sort(alist):
# n = len(alist)
# gap = n//2
# 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
#
# if __name__=="__main__":
# li = [54,26,93,17,77,31,44,55,20]
# print(li)
# shell_sort(li)
# print(li)
快速排序
def quick_sort(alist,first,last):
if first>=last:
return
n = len(alist)
mid_value = alist[first]
low = first
high = last
while low < 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]
alist[low] = mid_value
quick_sort(alist,first,low-1)
quick_sort(alist,low+1,last)
if __name__=="__main__":
li = [54,26,93,17,77,31,44,55,20]
print(li)
quick_sort(li,0,len(li)-1)
print(li)
# 归并排序
# def merge_sort(alist):
# n = len(alist)
# if n<=1:
# return alist
# mid = n//2
# left_li = merge_sort(alist[:mid])
# right_li = merge_sort(alist[mid:])
# left_pointer,right_pointer = 0,0
# result = []
# while left_pointer < len(left_li) and right_pointer < len(right_li):
# if left_li[left_pointer] < right_li[right_pointer]:
# result.append(left_li[left_pointer])
# left_pointer+=1
# else:
# result.append(right_li[right_pointer])
# right_pointer+=1
# result+=left_li[left_pointer:]
# result+=right_li[right_pointer:]
# return result
#
# if __name__=="__main__":
# li = [54,26,93,17,77,31,44,55,20]
# print(li)
# sorted_li = merge_sort(li)
# print(sorted_li)