快速排序
2021-02-19 00:17
标签:如何 数字 def 赋值 组成 变量 -- 递归 排序 快速排序 代码: 上边的快排效率比下图高,但是下图更好理解 快速排序 标签:如何 数字 def 赋值 组成 变量 -- 递归 排序 原文地址:https://www.cnblogs.com/zzsy/p/12687135.html快速排序
#1.核心操作,将基数mid放置到序列中间,使得基数左侧都是比它小的,右侧是比它大的
def sort(alist):
low = 0 #第一个元素下标
high = len(alist)-1 #最后一个元素下标
mid = alist[low] #基数:初始值为序列中的第一个数值
while low != high:
#先偏移high
while low alist[low]:
low += 1
else:
alist[high] = alist[low]
break
alist[low] = mid #alist[high] = mid
return alist
#2.将步骤1的核心操作递归作用到基数的左右两侧的子序列中
#如何区分根据基数拆分出的左右子序列呢?可以根据left和right的指向区分不同的子序列
def sort(alist,left,right):#left和right表示当前sort递归作用到哪一个子序列中
low = left #第一个元素下标
high = right #最后一个元素下标
#结束递归的条件
if low > high:
return
mid = alist[low] #基数:初始值为序列中的第一个数值
while low != high:
#先偏移high
while low alist[low]:
low += 1
else:
alist[high] = alist[low]
break
alist[low] = mid #alist[high] = mid
#上述为核心操作,需要将核心操作递归左右到左右子序列中
sort(alist,left,low-1) #将sort作用到左侧序列中
sort(alist,high+1,right) #将sort作用到右侧序列中
return alist
补充,递归结束条件疑问
当递归后,递归的序列会越来越小,当只剩一个的时候,low = high了,当再次递归时,sort(alist,left,low-1)和sort(alist,high+1,right)调用后,都会满足low > high,所以递归结束
def quicksort(array):
if len(array) pivot] ←------由所有大于基准值的元素组成的子数组
return quicksort(less) + [pivot] + quicksort(greater)
print quicksort([10, 5, 2, 3])