Python实现快速排序
1. 简介
快速排序(Quicksort)是一种常用的排序算法,它使用分治的思想将一个序列分割成两个子序列,然后对两个子序列分别进行排序,最终将整个序列排好序。
2. 快速排序流程
下面是快速排序的流程图:
flowchart TD
A(选择基准元素) --> B(将序列分割为两个子序列)
B --> C(对左子序列进行快速排序)
B --> D(对右子序列进行快速排序)
C --> E(合并左子序列和基准元素)
D --> E
E --> F(返回排序后的序列)
3. 实现步骤及代码
3.1 选择基准元素
在快速排序中,我们需要选择一个基准元素来将序列分割为两个子序列。通常选择序列的第一个元素作为基准元素。
def partition(arr, low, high):
pivot = arr[low]
i = low + 1
j = high
while True:
# 找到大于基准元素的索引
while i <= j and arr[i] < pivot:
i += 1
# 找到小于基准元素的索引
while i <= j and arr[j] > pivot:
j -= 1
if i <= j:
# 交换arr[i]和arr[j]
arr[i], arr[j] = arr[j], arr[i]
else:
break
# 交换基准元素和arr[j]
arr[low], arr[j] = arr[j], arr[low]
return j
3.2 将序列分割为两个子序列
在选择了基准元素后,我们需要将序列按照基准元素分割为两个子序列。比基准元素小的元素放在左边,比基准元素大的元素放在右边。
def quicksort(arr, low, high):
if low < high:
# 分割序列
pivot_index = partition(arr, low, high)
# 对左子序列进行快速排序
quicksort(arr, low, pivot_index - 1)
# 对右子序列进行快速排序
quicksort(arr, pivot_index + 1, high)
3.3 合并子序列和基准元素
在完成对左子序列和右子序列的快速排序后,我们需要将子序列和基准元素合并,得到最终的排序结果。
def quicksort(arr):
quicksort(arr, 0, len(arr) - 1)
return arr
4. 示例
假设我们有一个序列 [5, 3, 8, 4, 2],现在我们使用快速排序对其进行排序。
首先,选择基准元素为序列的第一个元素 5。
然后,将序列分割为两个子序列,小于基准元素的放在左边,大于基准元素的放在右边。
子序列左边:[3, 4, 2] 子序列右边:[8]
接下来,对左子序列 [3, 4, 2] 进行快速排序。
选择基准元素为子序列的第一个元素 3。
将子序列分割为两个子序列,小于基准元素的放在左边,大于基准元素的放在右边。
子序列左边:[2] 子序列右边:[4]
对右子序列 [4] 进行快速排序,无需再分割。
合并左子序列、基准元素和右子序列,得到排序后的序列:[2, 3, 4, 5, 8]
5. 总结
快速排序是一种高效的排序算法,它通过分治的思想将一个序列分割为两个子序列,然后对子序列进行递归排序,最终得到整个序列的排序结果