def quick_sort(arr,low,high):
''' 指针交换法实现快速排序
:param arr: 所排序的数组
:param low: 左起第一位数的位置
:param high: 左起最后一位数的位置
'''
if low >= high:
return
pivot = arr[low] # 基准数,这里选择左起第一位数
j = high # 哨兵j,从右往左找小于基准数的数
i = low #哨兵i,从左往右找大于基准数的数
while i != j: #当哨兵i 和哨兵j 木有相遇
while arr[j] >= pivot and i < j:
#因为选取最左边为基准点,所以哨兵j 先动,
#否则可能会出现和基准点交换值不准确的情况
j -= 1
while arr[i] <= pivot and i < j:
i += 1
if i < j:
arr[i], arr[j] = arr[j], arr[i]
if i == j: #当哨兵i 和哨兵j 相遇,和基准点交换值
arr[low],arr[j] = arr[j],arr[low]
quick_sort(arr,low,j-1)
quick_sort(arr,i+1,high)
arr=[6,1,2,7,9,3,4,5,10,8]
quick_sort(arr,0,9)
print(arr)
快速排序
快速排序使用分而治之的思想。每一轮确定一个数(基准点)的排序位置,与此同时,将比基准点小的数移到基准点左边,比基准点大的数移到右边。
平均时间复杂度为 O(NlogN)。每轮遍历N次,共 logN 轮。
最坏时间复杂度为 O(N^2)
参考链接
1.《啊哈!算法》第一章