快速排序是一种常用的排序算法,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是一种不稳定的排序算法。
下面是快速排序的基本步骤:
- 选择一个基准元素,通常选择第一个元素或者最后一个元素。
- 通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。
- 此时基准元素在其排好序后的正确位置。
- 然后分别对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个序列变成有序序列。
下面是一个快速排序的例子:
假设要排序的数组为:[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
- 选择第一个元素作为基准元素,即6。
- 从序列的第二个元素开始遍历
#include <iostream> #include <vector> using namespace std; // 快速排序函数,arr为要排序的数组,p、r为要排序的序列的起始和结束下标 void quickSort(vector<int>& arr, int p, int r) { // 如果序列长度大于1,则进行排序 if (p < r) { // 将序列分为两部分 int q = partition(arr, p, r); // 对两部分分别进行快速排序 quickSort(arr, p, q - 1); quickSort(arr, q + 1, r); } } int main() { // 创建要排序的数组 vector<int> arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8}; // 执行快速排序 quickSort(arr, 0, arr.size() - 1); // 输出排序后的数组 for (auto a : arr) { cout << a << " "; } return 0; }
上面代码中,快速排序函数quickSort实现了快速排序的基本步骤,递归地将序列划分为两部分,并对两部分进行快速排序。在quickSort函数中,还调用了一个名为partition的函数,它的作用是将序列分为两部分,其代码如下:
```cpp // 将序列arr[p...r]划分为两部分,返回基准元素的下标 int partition(vector& arr, int p, int r) { // 选择第一个元素作为基准元素 int pivot = arr[p]; int i = p; for (int j = p + 1; j <= r; j++) {