如何用C++实现快速排序算法

开发者心声 2019-10-23 ⋅ 19 阅读

快速排序(Quick Sort)是一种常用的排序算法,它利用分治的思想将一个数组分成两个子数组,然后递归地对这两个子数组进行排序。快速排序的平均时间复杂度为O(nlogn),并且它是原地排序算法,不需要额外的存储空间。

下面以C++语言为例,通过示例代码演示如何实现快速排序算法。

实现步骤

  1. 选择一个数组中的元素作为基准(pivot)。
  2. 将数组分成两个部分:小于基准的元素和大于基准的元素。
  3. 递归地对两个部分进行快速排序。
  4. 合并两个部分,得到有序的数组。

示例代码

#include <iostream>
#include <vector>

using namespace std;

// 交换两个元素的值
void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

// 分区函数,将小于基准的元素放在左边,大于基准的元素放在右边,并返回基准的位置
int partition(vector<int>& nums, int start, int end) {
    int pivot = nums[start]; // 选择第一个元素作为基准
    int i = start, j = end;
    while (i < j) {
        while (i < j && nums[j] >= pivot) // 从右边找到第一个小于基准的元素
            j--;
        while (i < j && nums[i] <= pivot) // 从左边找到第一个大于基准的元素
            i++;
        if (i < j) // 交换两个元素的位置
            swap(nums[i], nums[j]);
    }
    nums[start] = nums[i]; // 将基准放在正确的位置
    nums[i] = pivot;
    return i;
}

// 快速排序函数,递归地对数组进行排序
void quickSort(vector<int>& nums, int start, int end) {
    if (start < end) {
        int pivot = partition(nums, start, end); // 获取基准的位置
        quickSort(nums, start, pivot - 1); // 对左边的部分进行排序
        quickSort(nums, pivot + 1, end); // 对右边的部分进行排序
    }
}

int main() {
    vector<int> nums = {5, 2, 9, 1, 4, 7, 3, 6, 8};
    quickSort(nums, 0, nums.size() - 1);
    for (int num : nums)
        cout << num << " ";
    cout << endl;
    return 0;
}

以上代码实现了一个快速排序的示例,其中使用了分区函数partition将数组分成两个部分,并返回基准的位置。然后,通过递归调用quickSort对左右两个部分进行排序。

总结

快速排序是一种高效的排序算法,它解决了排序问题,具有较好的时间复杂度和内存使用效率。希望通过本文的介绍,读者能够理解快速排序算法的原理,并掌握用C++语言实现的方法。


全部评论: 0

    我有话说: