用递归函数做快速排序

# 快速排序算法的递归实现
快速排序(Quicksort)是一种高效的排序算法,由英国计算机科学家东尼·霍尔(Tony Hoare)在1960年发明。它的基本思想是通过一个基准值(pivot)将数组分为两个子数组,一个包含小于基准值的元素,另一个包含大于基准值的元素,然后递归地对这两个子数组进行排序。
## 算法原理
快速排序算法遵循分而治之(Divide and Conquer)的策略,其步骤如下:
1. 选择一个基准值(pivot)。
2. 重新排列数组,所有小于基准值的元素放在基准值前面,所有大于基准值的元素放在基准值后面。这一步称为分区(partitioning)。
3. 递归地对基准值前后的子数组进行快速排序。
## 递归实现
下面是快速排序算法的递归实现:

```python
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[len(arr) // 2]  # 选择中间元素作为基准值
        left = [x for x in arr if x < pivot]  # 小于基准值的元素
        middle = [x for x in arr if x == pivot]  # 等于基准值的元素
        right = [x for x in arr if x > pivot]  # 大于基准值的元素
        return quick_sort(left) + middle + quick_sort(right)  # 递归排序并合并结果
```

在这个实现中,我们首先检查数组的长度,如果数组长度小于或等于1,那么它已经是有序的,我们直接返回原数组。否则,我们选择数组中间的元素作为基准值,然后创建三个列表:`left` 包含小于基准值的元素,`middle` 包含等于基准值的元素,`right` 包含大于基准值的元素。最后,我们递归地对 `left` 和 `right` 进行排序,并将排序后的结果与 `middle` 合并。
## 示例
让我们通过一个例子来演示快速排序算法的工作原理。假设我们有以下数组:

```python
arr = [5,6,5,4,8,2,8,2,1,7]
```

使用 `quick_sort` 函数对其进行排序:

```python
print(quick_sort(arr))
```

输出结果将是:

```
[1, 2, 2, 4, 5, 5, 6, 7, 8, 8]
```

## 结论
快速排序算法由于其高效的分区策略和递归性质,通常比其他排序算法(如冒泡排序、选择排序和插入排序)更快。它的平均时间复杂度为 $O(n \log n)$,在最坏的情况下(当数组已经有序或接近有序时)为 $O(n^2)$。尽管在最坏的情况下性能较差,但快速排序在实际应用中通常表现良好,并且是许多标准库中排序函数的常用算法。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋葱土豆和香菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值