1.插入排序
def insert_sort(arr):
for i in range(1,len(arr)):
temp = arr[i]
j=i-1
while j>=0 and arr[j]>temp:
arr[j+1]=arr[j]
j-=1
arr[j+1]=temp
arr = [4, 7 ,8 ,2 ,3 ,5]
insert_sort(arr)
print(arr)
-
快速排序
import random def quick_sort(li,left,right): if left<right: # 返回位置 mid=partition(li,left,right) # 递归 quick_sort(li,left,mid-1) quick_sort(li,mid+1,right) return li def partition(li,left,right): # 把要排序的值存起来 tmp=li[left] while left<right: # 从右边找比tmp大的数 while left<right and li[right]>=tmp: right-=1 # 把right的值放入左边的空缺 li[left]=li[right] # 从左边找比tmp大的数 while left<right and li[left]<=tmp: left+=1 # 把left的值放入右边的空缺 li[right]=li[left] li[left]=tmp return left li=[i for i in range(2,100,2)] random.shuffle(li) print(li) new_li=quick_sort(li,0,len(li)-1) print(new_li)
-
堆排序
# 1.把数组看做完全二叉树,先创建一个堆 def sift(li,low,high): # 先把栈顶元素存起来 tmp=li[low] i=low #父节点 j=2*i+1 #左孩子节点 while j<=high: #左孩子节点小于最后一个元素的位置 # y有右节点,并且比左节点比右节点大 if j<high and li[j]<li[j+1]: j+=1 # 左节点比这个数大 if li[j]>tmp: li[i]=li[j] i=j j=2*i+1 else: break li[i]=tmp def heap_sort(li): n=len(li) # 建堆的过程 for i in range(n//2-1,-1,-1): # i最后一个非叶子节点的位置 sift(li,i,n-1) # 出数 for i in range(n-1,-1,-1): # i表示high的位置 li[0],li[i]=li[i],li[0] sift(li,0,i-1) # 堆排序模块heapq import heapq li=[5,8,4,61,7,1,6] heapq.heapify(li) print(heapq.heappop(li)) print(heapq.heappop(li)) # 前n大的数 # print(heapq.nlargest(n,list,key)) # 前n小的数 # print(heapq.nsmallest(n,list,key))
-
归并排序
# 一次归并排序 def merge(li,low,mid,high): i=low j=mid+1 li_tem=[] while i<=mid and j<=high: if li[i]<li[j]: li_tem.append(li[i]) i+=1 else: li_tem.append(li[j]) j+=1 while i<=mid: li_tem.append(li[i]) i+=1 while j<=high: li_tem.append(li[j]) j+=1 for i in range(low,high+1): li[i]=li_tem[i-low] # 归并排序 def merge_sort(li,low,high): if low<high: mid=(low+high)//2 merge_sort(li,low,mid) merge_sort(li,mid+1,high) merge(li,low,mid,high) import random li=[i for i in range(100)] random.shuffle(li) merge_sort(li,0,len(li)-1) print(li)