"""
:分治思想
在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较大
的记录一次就能交换到后面单元,关键字较小的记录一次就能交换到前面
单元,记录每次移动的距离较大,因而总的比较和移动次数较少。
p:数据左端位置
r:数据右端位置
"""
def quickSort(a,p,r):
"""
递归调用函数
a:待排序列表
"""
if(p<r):
q = partition(a,p,r)
quickSort(a,p,q-1) #对左半段排序
quickSort(a,q+1,r) #对右半段进行排序
def partition(a,p,r):
i = p
j = r
x = a[p] #在a[0]处挖坑,此时x == a[p] == a[i]
while i<j:
while a[j]>=x and i<j: #从后往前找小于x的元素,将改元素填入a[o]坑中
j = j-1
a[i] = a[j]
while a[i] < x and i<j: #从左到右找大于等于x的元素,将该元素填入后面形成的坑中
i = i+1
a[j] = a[i]
a[i] = x
return i
if __name__ == '__main__':
a = [9,0,1,5,7,6,3]
quickSort(a,0,len(a)-1)
print(a)
分治法—快速排序
最新推荐文章于 2022-11-01 16:47:05 发布