文章目录
- @[toc]
- Python实现
- 时间复杂性
- 最坏时间复杂性
- 最好时间复杂性
- 平均时间复杂性
文章目录
- @[toc]
- Python实现
- 时间复杂性
- 最坏时间复杂性
- 最好时间复杂性
- 平均时间复杂性
个人主页:丷从心·
系列专栏:分治算法
学习指南:算法学习指南
Python实现
def partition(arr, low, high):
pivot = arr[low]
# 将 pivot 元素移动到列表的最右边
arr[low], arr[high] = arr[high], arr[low]
# 通过交换操作, 将小于 pivot 的元素移动到左边, 大于 pivot 的元素移动到右边
i = low
for j in range(low, high):
if arr[j] < pivot:
arr[i], arr[j] = arr[j], arr[i]
i += 1
# 将 pivot 元素放置到正确的位置
arr[i], arr[high] = arr[high], arr[i]
return i
def quick_sort(arr, low, high):
if low < high:
pivot_index = partition(arr, low, high)
quick_sort(arr, low, pivot_index - 1)
quick_sort(arr, pivot_index + 1, high)
return arr
arr = [3, 1, 5, 2, 4]
sorted_arr = quick_sort(arr, 0, len(arr) - 1)
print(f'sorted_arr: {sorted_arr}')
sorted_arr: [1, 2, 3, 4, 5]
时间复杂性
- 快速排序的运行时间与划分是否对称有关,其最坏情况发生在划分过程产生的两个区域分别包含 n − 1 n - 1 n−1个元素和 1 1 1个元素的时候
- 在最好情况下,每次划分所取的基准都恰好为中值,即每次划分都产生两个大小为 n / 2 n / 2 n/2的区域
最坏时间复杂性
T ( n ) = { O ( 1 ) n ≤ 1 T ( n − 1 ) + O ( n ) n > 1 T(n) = \begin{cases} O(1) & n \leq 1 \\ T(n - 1) + O(n) & n > 1 \end{cases} T(n)={O(1)T(n−1)+O(n)n≤1n>1
T ( n ) = n 2 T(n) = n^{2} T(n)=n2
最好时间复杂性
T ( n ) = { O ( 1 ) n ≤ 1 2 T ( n / 2 ) + O ( n ) n > 1 T(n) = \begin{cases} O(1) & n \leq 1 \\ 2 T(n / 2) + O(n) & n > 1 \end{cases} T(n)={O(1)2T(n/2)+O(n)n≤1n>1
T ( n ) = O ( n log n ) T(n) = O(n \log{n}) T(n)=O(nlogn)
平均时间复杂性
- 可以证明,快速排序算法在平均情况下的时间复杂性也是 O ( n log n ) O(n \log{n}) O(nlogn)