defSelectSort(lst):iflen(lst)<=1:return lst
for i inrange(len(lst)):
temp = i
for j inrange(i+1,len(lst)):if lst[j]< lst[temp]:
temp = j
lst[i], lst[temp]= lst[temp], lst[i]return lst
堆排序
defHeapSort(lst):defheapAdjust(lst, start, end):
temp = lst[start]
son =2* start +1while son <= end:if son < end and lst[son]< lst[son+1]:
son +=1if lst[son]<= temp:break
lst[start]= lst[son]
start, son = son,2*son+1
lst[start]= temp
iflen(lst)<=1:return lst
for i inrange(len(lst)//2-1,-1,-1):
heapAdjust(lst, i,len(lst)-1)for i inrange(len(lst)-1,0,-1):
lst[i], lst[0]= lst[0], lst[i]
heapAdjust(lst,0, i-1)return lst
插入排序
defInsertSort(lst):iflen(lst)<=1:return lst
for i inrange(1,len(lst)):
j = i
target = lst[i]while j >0and lst[j-1]> target:
lst[j]= lst[j-1]
j -=1
lst[j]= target
return lst
希尔排序
defShellSort(lst):iflen(lst)<=1:return lst
d =len(lst)//2while d >=1:for i inrange(d,len(lst)):
k = d
temp = lst[i]while i-k >=0and temp < lst[i-k]:
lst[i-k+d]= lst[i-k]
k += d
lst[i-k+d]= temp
d = d//2return lst