基本思想
分治法。
分解:将数组A[p..r]分成A[p..q-1]和A[q+1..r]两部分,其中左数组中所有元素小于等于A[q],右边所有元素大于A[q]。
解决:递归调用快速排序
合并:由于是原地排序,所以不用合并
具体实现
def partition(nums: List, p, r):key = nums[r]i = p - 1for j in range(p, r):if nums[j] <= key:i += 1nums[i], nums[j] = nums[j], nums[i]nums[i+1], nums[r] = nums[r], nums[i+1]return i + 1def _quick_sort(nums: List, p , r):if p < r:q = partition(nums, p, r)_quick_sort(nums, p, q-1)_quick_sort(nums, q+1, r)def quick_sort(nums: List):length = len(nums)_quick_sort(nums, 0, length-1)
性能分析
平均时间复杂度:
最坏时间复杂度:
空间复杂度:
- 对小数组使用归并排序。
- 后面再写
- 后面再写
