C++实现快速排序(Quicksort)算法

yizhihongxing

C++实现快速排序(Quicksort)算法

快速排序(Quicksort)算法是一种常见的排序算法,具有快速、高效、稳定性好等特点,广泛应用于各种工程实践中。

快速排序的基本思想

快速排序的基本思想是:选取一个基准值(pivot),将待排序序列划分成左右两个子序列,左边的子序列中所有元素都不大于基准值,右边的子序列中所有元素都不小于基准值,然后对左右两个子序列进行递归排序,最终得到有序序列。

C++实现快速排序算法

下面是C++实现快速排序算法的完整代码:

#include <iostream>
#include <vector>

using namespace std;

int partition(vector<int>& nums, int left, int right) {
    int pivot = nums[right];
    int i = left - 1;
    for (int j = left; j < right; j++) {
        if (nums[j] <= pivot) {
            i++;
            swap(nums[i], nums[j]);
        }
    }
    swap(nums[i+1], nums[right]);
    return i+1;
}

void quicksort(vector<int>& nums, int left, int right) {
    if (left < right) {
        int p = partition(nums, left, right);
        quicksort(nums, left, p-1);
        quicksort(nums, p+1, right);
    }
}

void print(vector<int>& nums) {
    for (auto num : nums)
        cout << num << " ";
    cout << endl;
}

int main() {
    vector<int> nums = {3, 9, 4, 2, 5, 1, 7, 6, 8};
    quicksort(nums, 0, nums.size()-1);
    print(nums);

    return 0;
}

上面的代码实现了快速排序算法的核心部分:partition函数和quicksort函数。其中,partition函数是划分函数,用来将待排序序列划分成左右两个子序列;quicksort函数是递归排序函数,用来对左右两个子序列进行递归排序。

示例说明

下面给出两个示例来说明快速排序算法的实现过程。

示例1:

原始序列:[3, 9, 4, 2, 5, 1, 7, 6, 8]

第一次划分结果:[3, 4, 2, 1, 6, 8, 9, 7, 5]

第二次划分结果:[1, 2, 3, 4, 6, 8, 9, 7, 5]

第三次划分结果:[1, 2, 3, 4, 5, 6, 8, 9, 7]

第四次划分结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]

经过四次划分后得到有序序列。可以看到,快速排序算法具有快速、高效、稳定性好等特点。

示例2:

原始序列:[2, 1, 4, 3, 6, 5, 8, 7, 9]

第一次划分结果:[1, 2, 3, 4, 6, 5, 8, 7, 9]

第二次划分结果:[1, 2, 3, 4, 6, 5, 8, 7, 9]

第三次划分结果:[1, 2, 3, 4, 5, 6, 8, 7, 9]

第四次划分结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]

经过四次划分后得到有序序列。可以看到,快速排序算法对于不同的数据集都具有高效的排序能力。

总结

快速排序算法是一种经典的排序算法,实现简单,运行速度快,效率高,是大多数应用领域中使用最广的排序算法之一。对于快速排序算法的实现过程有了深刻的理解,可以为我们在实践中使用快速排序算法提供有力的支持。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现快速排序(Quicksort)算法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java 堆排序实例(大顶堆、小顶堆)

    下面我将为您介绍 Java 堆排序实例(大顶堆、小顶堆)的完整攻略。 1. 堆排序介绍 堆排序是一种树形选择排序方法,它的特点是将数组看成一棵完全二叉树,然后通过建立堆(一种特殊的完全二叉树),逐个取出堆顶元素并重新建堆的过程来进行排序。具体来说,堆排序可以分为两种:大顶堆排序和小顶堆排序。 在大顶堆排序中,堆顶元素最大,从小到大进行排序;在小顶堆排序中,堆…

    算法与数据结构 2023年5月19日
    00
  • 超详细解析C++实现快速排序算法的方法

    超详细解析C++实现快速排序算法的方法 什么是快速排序? 快速排序是一种高效的排序算法。因为采用了分治法的思想,利用递归实现,每次排序只需比较部分元素,而不需要像冒泡排序和插入排序那样需要从头到尾对比每个元素,因此效率非常高。 快速排序算法的基本思想 快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,使得前面的记录的关键字均小于后面的记录的关键…

    算法与数据结构 2023年5月19日
    00
  • 冒泡排序算法及Ruby版的简单实现

    冒泡排序是一种比较简单的排序算法,其基本思想是重复地遍历数列,每次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换这两个元素的位置,直到遍历完整个数列,这样一次遍历后,数列中最大的元素就被排到了最后面。重复执行此过程,直到整个数列有序为止。 以下是冒泡排序算法的Ruby版简单实现: def bubble_sort(array) n = array.l…

    算法与数据结构 2023年5月19日
    00
  • 人脸检测中AdaBoost算法详解

    人脸检测中AdaBoost算法详解 什么是AdaBoost算法? AdaBoost(Adaptive Boosting,自适应增强算法)是一种分类算法,它可以将若干个弱分类器组合起来形成一个强分类器,以提高分类的准确率和鲁棒性。AdaBoost最初用于人脸识别领域,在实际应用中具有良好的效果。 AdaBoost分类器是如何工作的? AdaBoost分类器是基…

    算法与数据结构 2023年5月19日
    00
  • Flutter Dart快速排序算法示例详解

    Flutter Dart快速排序算法示例详解 介绍 快速排序是一种排序算法,其基本思想是选择一个基准元素,将数组分成两个子数组,其中一个子数组的元素都比基准元素小,另一个子数组的元素都比基准元素大。然后递归地对两个子数组进行快速排序。 实现步骤 选择一个基准元素,并将其从数组中移除。 遍历数组,将小于基准元素的元素放入一个新的左侧数组中,大于基准元素的元素放…

    算法与数据结构 2023年5月19日
    00
  • Go语言实现常用排序算法的示例代码

    本文将详细介绍如何使用Go语言实现常用排序算法的示例代码。主要内容包括: 排序算法介绍 排序算法示例代码 算法测试 排序算法介绍 排序算法是计算机科学基本的算法,其目的是将一组数据按照特定的规则进行排序。常用的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序等。以下是每种算法的简单介绍: 冒泡排序:重复比较相邻的两个元素,将较大的元素向后移动,最…

    算法与数据结构 2023年5月19日
    00
  • c语言5个常用的排序算法实例代码

    C语言5个常用的排序算法实例代码 本文旨在讲解C语言中常用的5种排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。以下将逐一介绍它们的实现过程,并提供示例代码。 冒泡排序(Bubble Sort) 算法思想:冒泡排序是一种简单的排序算法,它会首先比较相邻的元素,如果它们的顺序不正确,就交换它们的位置。这样一遍比较下来,最后一个元素就已经是最大的…

    算法与数据结构 2023年5月19日
    00
  • 前端JavaScript多数元素的算法详解

    前端JavaScript多数元素的算法详解 算法介绍 多数元素在一个数组中出现次数超过一半的元素,因此要找到多数元素,需要考虑其出现次数是否超过了数组长度的一半。本文介绍三种常见的多数元素算法,分别为排序法、哈希表法和摩尔投票法。 排序法 排序法的思路是先对数组进行排序,然后返回数组中间的那个元素即可。由于多数元素出现次数超过了数组长度的一半,因此排序后中间…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部