18、快速递归算法:快速排序的原理与实现

快速递归算法:快速排序的原理与实现

1. 递归与算法提速

理解递归能够解锁各种新算法,如遍历文件系统或生成变位词。递归也是让代码运行速度大幅提升的关键。在之前我们接触过一些排序算法,像冒泡排序、选择排序和插入排序,但在实际应用中,这些方法很少用于数组排序。大多数计算机语言都为数组提供了内置的排序函数,而其中很多语言底层使用的排序算法就是快速排序(Quicksort)。深入研究快速排序,不仅能让我们了解如何利用递归提升算法速度,还能将这种方法应用到其他实际算法中。

2. 快速排序概述

快速排序是一种极快的排序算法,在平均情况下特别高效。虽然在最坏情况下(如逆序排列的数组),它的性能与插入排序和选择排序相近,但在大多数情况下(即平均情况),它的速度要快得多。快速排序依赖于“分区”(partitioning)的概念,下面我们先来了解分区。

3. 分区(Partitioning)

分区是指从数组中选取一个随机值(称为“基准值”,pivot),然后确保所有小于基准值的数都位于基准值的左侧,所有大于基准值的数都位于基准值的右侧。以下是分区的具体步骤:
1. 左指针持续向右移动一个单元格,直到遇到大于或等于基准值的值,然后停止。
2. 右指针持续向左移动一个单元格,直到遇到小于或等于基准值的值,然后停止。若右指针到达数组开头,也会停止。
3. 右指针停止后,会出现一个转折点。如果左指针已经到达(或超过)右指针,就进入步骤4;否则,交换左指针和右指针所指向的值,然后重复步骤1、2和3。
4. 最后,将基准值与左指针当前指向的值进行交换。

分区完成后,我们可以确保基准值左侧的所有值都小于基准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值