快速排序
实现
def partition(nums, left, right):
middle = (left+right) // 2
pivot = nums[middle]
swap(nums, middle, right)
# 现在主元 pivot 等于 nums[right]
boundary = left
for index in range(left, right):
if nums[index] < pivot:
swap(nums, index, boundary)
boundary += 1
swap(nums, boundary, right)
return boundary
def qsort(nums, left, right):
if left < right:
pivotIndex = partition(nums, left, right)
qsort(nums, left, pivotIndex-1)
qsort(nums, pivotIndex+1, right)
def quick_sort(nums):
qsort(nums, 0, len(nums)-1)
最好情况?
快速排序平均复杂度?最坏情况如何优化?
平均时间复杂度:O(n log n)(证明略复杂,暂不深究。)
最坏情况:
- 例如每次划分时,都分为 1 个和 n-1 个,快速排序的时间复杂度就是 O(n^2);
- 上述的递归实现,如果待排序列的规模比较小,递归的副作用会凸显出来,效果还不如简单的插入排序。