说明
基本概念
-
快速排序采用分治的思想,通过在数组中选定一个基准数并按照其他元素与基数的大小关系分别进行递归,对基准数的选择没有要求。
-
快速排序的时间复杂度:
- 最坏情况: O(n²) (当每次选择的基准都是最小或最大元素时)
- 最佳情况: O(n log n) (当每次选择的基准都能均匀地划分数组时)
- 平均情况: O(n log n)
代码
原地修改数组
-
基准数为末位:
-
def quick_sort(arr,start,end): if start < end: pivot = quick(arr,start,end) # 查找基准数字位置 quick_sort(arr,start,pivot-1) # 左遍历 quick_sort(arr,pivot+1,end) # 右遍历 def quick(arr,start,end): standard = arr[end] j = start # 这里的 j 可以理解为小于基准数的个数(从零开始) for i in range(start,end): if arr[i] < standard: arr[i],arr[j] = arr[j],arr[i] j += 1 # 上面j已经提前自增了,现在指向的是第一个出现的比基准数大的值 # 交换完位置后,基准数左边的数小于它,右边的数大于它 arr[j],arr[end] = arr[end],arr[j] return j # 返回基准数的下标 arr = [10, 7, 8, 9, 1, 5] quick_sort(arr,0,len(arr)-1) print(arr)
运行结果:
- [1, 5, 7, 9, 8, 10]
-
基准数为首位