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

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日

相关文章

  • C++实现堆排序示例

    下面就详细讲解一下“C++实现堆排序示例”的完整攻略。 什么是堆排序 堆排序是一种树形选择排序方法,它是通过将待排序的序列构建成一个堆,在堆中,全局最大或最小的元素总是位于根节点,根节点最大或最小的元素会被输出到一个新的序列中,再将剩余的元素重新构建成堆进行下一轮循环,直到所有元素均被输出为止。 实现步骤 堆排序主要有两个步骤:构建堆和调整堆。 构建堆 将待…

    算法与数据结构 2023年5月19日
    00
  • 深入学习C语言中常见的八大排序

    深入学习C语言中常见的八大排序 前言 排序算法是计算机科学中的基本问题之一,是计算机领域内经典且常见的算法问题之一。排序算法对于优化数据检索、数据压缩、数据库查询效率等方面都有着重要的意义。本文将为您详细讲解常见的八种排序算法的原理、时间复杂度以及应用场景,希望能够对您学习和了解排序算法提供帮助。 简介 排序算法是将一串数据按照一定的规则进行排列,排序算法可…

    算法与数据结构 2023年5月19日
    00
  • python中的插入排序的简单用法

    下面是Python中插入排序的简单用法攻略: 1. 什么是插入排序 插入排序是一种简单的排序算法,它的基本思想是将未排序的元素依次插入到已排序的有序序列中的合适位置,以此完成排序。插入排序的时间复杂度为O(n^2),通常用于小规模数据的排序。 2. 插入排序的Python实现 以下是插入排序的Python代码实现: def insertion_sort(da…

    算法与数据结构 2023年5月19日
    00
  • python KNN算法实现鸢尾花数据集分类

    Python实现KNN算法对鸢尾花数据集进行分类 介绍 KNN(K-Nearest-Neighbor)算法是一种非常常用且简单的分类算法之一。它的基本思想是把未知数据的标签与训练集中最邻近的K个数据的标签相比较,得票最多的标签就是未知数据的标签。本文将介绍如何使用Python实现对鸢尾花数据集进行KNN分类。 步骤 加载数据 首先,我们需要加载鸢尾花数据集。…

    算法与数据结构 2023年5月19日
    00
  • Javascript实现快速排序(Quicksort)的算法详解

    Javascript实现快速排序的算法详解 在这个攻略中,我们将通过Javascript实现快速排序算法,并讲解算法的详细过程。 快速排序的基本思想 快速排序是一种基于交换的排序算法,其基本思想是通过选择一个基准元素,在一趟排序过程中,将之前需要排序的序列中的元素分割成两个部分,其中,左边部分元素的值都小于基准元素的值,右边部分元素的值都大于基准元素的值,然…

    算法与数据结构 2023年5月19日
    00
  • java图搜索算法之图的对象化描述示例详解

    Java图搜索算法之图的对象化描述示例详解 什么是图? 图是一种非线性数据结构,由节点和边组成,节点表示图中对象,边表示节点间相互关系。图分为有向图和无向图,有向边和无向边。 图的对象化描述 Java中可以使用对象化的方式来描述一个图,主要有两个类: Vertex(节点类) 节点类表示图中的节点,主要有两个属性: label:节点标签,用于区分不同节点。 w…

    算法与数据结构 2023年5月19日
    00
  • javascript使用递归算法求两个数字组合功能示例

    下面是关于 JavaScript 使用递归算法求两个数字组合的完整攻略: 什么是递归? 递归是一种思想,用来解决一些需要重复执行的问题,比如求一个数的阶乘,求一个斐波那契数列等。通俗的讲,递归就是函数自己调用自己。 递归的使用场景 递归通常用于解决以下两类问题: 包含自相似性质的问题,如分形图形。 对于可被拆分为相同问题的大型问题。 求两个数字组合的递归方案…

    算法与数据结构 2023年5月19日
    00
  • 堆排序算法(选择排序改进)

    堆排序算法是一种基于二叉堆的选择排序改进算法。它利用了二叉堆的特点,可以将排序时间降至O(nlogn)级别。下面我们来详细讲解它的完整攻略。 基本思路 将待排序的序列构建成一个最大堆。 将堆顶的元素(即当前最大元素)跟数组最后一个元素交换位置,然后将剩余的元素进行堆调整,使其满足最大堆的要求。 重复步骤2,直至排序完成。 步骤详解 1. 构建最大堆 对于一个…

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