快速排序算法
from typing import List
def Partion(data:List[int],start:[int],end:[int]):
part=data[start]
while start<end:
while data[end] >= part and start < end:
end -= 1
data[end], data[start] = data[start], data[end]
while data[start]<=part and start < end:
start+=1
data[start],data[end]=data[end],data[start]
print(‘sort’,data)
return start
def quicksort(data:List[int],start:[int],end:[int]):
if start<end:
middle=Partion(data,start,end)
quicksort(data,start,middle-1)
quicksort(data,middle+1,end)
if name==“main”:
data=[5,3,7,6,4,1,0,2,9,10,8]
quicksort(data,0,10)
print(‘data’,data)
每一轮排序之后的结果:
sort [2, 3, 0, 1, 4, 5, 6, 7, 9, 10, 8]
sort [1, 0, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 8]
sort [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
插入排序
def inserttionSort(arr):
arr_length=len(arr)
for i in range(1,arr_length):
key=arr[i]
j=i-1
while j>=0 and key<arr[j]:
arr[j+1]=arr[j]
j-=1
arr[j+1]=key
return arr
if name==“main”:
a=[3,5,1,2,7,6]
res=inserttionSort(a)
print(‘res’,res)
选择排序
def selectsort(arr):
for i in range(len(arr)-1):
min=i
for j in range(i+1,len(arr)):
if arr[j]<a[min]:
min=j
if min!=i:
arr[i],a[min]=a[min],arr[i]
return arr
if name==“main”:
a=[4,6,1,3,5,6]
res=selectsort(a)
冒泡排序
def bubble_sort(arr):
for i in range(len(arr)-1): #外层是比较次数
flag=False
for j in range(len(arr)-1-i): #内层是交换次数
if arr[j]>arr[j+1]:
a[j],arr[j+1]=arr[j+1],arr[j]
flag=True
print(‘arr’,arr)
if not flag:
break
return arr
#加入flag的目的就是为了保证是否交换完全,要是内层已经完成了,不再交换了,那么本次循环就排序可以结束了。
排序稳定性:
稳定的排序:直接插入排序、冒泡排序、归并排序
不稳定的排序:希尔排序、直接选择排序、堆排序、快速排序