基本思想
分治法。
分解:将数组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 - 1
for j in range(p, r):
if nums[j] <= key:
i += 1
nums[i], nums[j] = nums[j], nums[i]
nums[i+1], nums[r] = nums[r], nums[i+1]
return i + 1
def _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)
性能分析
平均时间复杂度:
最坏时间复杂度:
空间复杂度:
- 对小数组使用归并排序。
- 后面再写
- 后面再写