3路快速排序(荷兰国旗问题)

3路快速排序(荷兰国旗问题)

在这里,我们将看到快速排序技术,但我们将使用三路快速排序。基本的快速排序技术只是找到一个元素作为枢轴,然后围绕枢轴对数组进行分区,之后,在枢轴的左右子数组上递归。

三路快速排序类似,但有三个部分。数组arr[1到n]被分为三个部分。

arr[1到i]arr[i + 1, j]arr[j + 1, n]

算法

partition(arr, left, right, i, j) −

begin   if right – left <= 1, then      if arr[right] < arr[left], then         swap arr[right] and arr[left]      i := left      j := right      return   end if   mid := left, pivot = arr[right]   while mid <= right, do      if arr[mid] < pivot, then         swap arr[left], arr[mid]         increase left and mid by 1      else if arr[mid] = pivot, then increase mid by 1      else         swap arr[mid], arr[right]         decrease right by 1   done   i := left – 1   j := midend

快速排序(arr,左,右) –

begin   if left >= right, then      return   end if   define i and j   partition(arr, left, right, i, j)   quicksort(arr, left, i)   quicksort(arr, j, right)end

Example

的中文翻译为:

示例

#include#includeusing namespace std;void partition(int arr[], int left, int right, int &i, int &j) {   if (right - left <= 1) {      if (arr[right] < arr[left])         swap(arr[right], arr[left]);      i = left;      j = right;      return;}int mid = left;int pivot = arr[right];while (mid <= right) {   if (arr[mid] pivot)         swap(arr[mid], arr[right--]);   }   i = left-1;   j = mid;}void quicksort(int arr[], int left, int right) {   if (left >= right) //1 or 0 elements      return;   int i, j;   partition(arr, left, right, i, j);   quicksort(arr, left, i);   quicksort(arr, j, right);}void display(int arr[], int n) {   for (int i = 0; i < n; ++i)   cout << " " << arr[i];   cout << endl;}int main() {   int a[] = {4, 9, 4, 3, 1, 9, 4, 3, 9, 4, 3, 1, 4};   int n = sizeof(a) / sizeof(int);   display(a, n);   quicksort(a, 0, n - 1);   display(a, n);}

输出

4 9 4 3 1 9 4 3 9 4 3 1 41 1 3 3 3 4 4 4 4 4 9 9 9

以上就是3路快速排序(荷兰国旗问题)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:24:12
下一篇 2025年12月17日 22:24:21

相关推荐

  • JS排序算法实现_快速排序优化方案

    快速排序平均时间复杂度为O(n log n),通过三数取中和小数组插入排序可优化性能。 快速排序是一种高效的排序算法,平均时间复杂度为 O(n log n),但在极端情况下可能退化到 O(n²)。为了提升其稳定性和性能,可以通过多种方式对基础快排进行优化。以下是 JavaScript 中实现快速排序…

    2025年12月21日
    000
  • js如何实现数组快速排序 3种快速排序算法实现方案分享

    快速排序是一种基于“分而治之”策略的高效排序算法,其核心是选定一个基准值,将数组分为两部分,使得左边元素小于基准值,右边元素大于基准值,然后递归地对左右子数组排序。文章介绍了三种javascript实现方案:1. lomuto分区方案选择最后一个元素为基准,通过指针i划分边界,优点简单直观但易导致分…

    2025年12月20日 好文分享
    000
  • c++ 快速排序怎么写 c++快速排序算法代码

    快速排序通过基准分治实现高效排序。1. 选择末尾元素为基准,使用双指针划分数组;2. partition函数确定基准正确位置;3. quickSort递归处理左右子区间;4. 平均时间复杂度O(n log n),最坏O(n²);5. C++代码利用vector和swap,简洁清晰,适合学习应用。 快…

    2025年12月19日
    000
  • C++怎么实现一个快速排序算法_C++经典排序算法与QuickSort代码详解

    快速排序采用分治策略,通过分区操作将数组分为两部分并递归排序。选择基准元素后,用双指针法重排数组,使左侧元素小于等于基准,右侧大于基准,基准置于正确位置。常用Lomuto分区方案以末尾元素为基准,通过交换实现分区,返回基准位置供递归使用。完整代码包含partition和quickSort函数,主函数…

    2025年12月19日
    000
  • 怎样用指针实现C++数组排序 手写快速排序算法示例

    快速排序是一种分而治之的排序算法,通过选择基准值将数组分为两部分并递归排序。1. 定义排序函数,参数为两个int*指针表示数组范围;2. 选择基准值,通常取最左边元素;3. 使用双指针从左右扫描并交换不符合顺序的元素;4. 将基准值放到正确位置后递归处理左右子数组;5. 注意指针边界、基准选择及指针…

    2025年12月18日 好文分享
    000
  • 如何在C++中实现快速排序算法_快速排序实现与优化技巧

    快速排序通过分而治之的思想实现高效排序,其核心在于partition函数和递归调用。1. 选择基准元素时,避免最坏情况可采用随机化或三数取中法;2. 处理大数据集潜在问题可通过迭代版本、尾递归优化或混合排序解决;3. 快速排序优势为平均性能好且原地排序,劣势为不稳定且最坏情况复杂度高,适用于大规模数…

    2025年12月18日 好文分享
    100
  • C语言中的快速排序是什么?

    由于其相对于其他排序算法的普及性和受欢迎程度,快速排序是一种经常使用的排序算法。然后,它将数组分为两组,一组包含小于所选主元的元素,另一组包含大于主元的元素。之后,算法对每个分区重复此过程,直到整个数组排序完毕。 任何需要排序的情况都可以从快速排序中受益,包括数据库应用程序、科学计算和 Web 应用…

    2025年12月17日
    000
  • C# 快速排序

    c# 快速排序 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Sort{ class QuickSorter { private static int[] myA…

    2025年12月17日
    100
  • 用Python怎么实现快速排序

    用Python实现快速排序的方法:1、定义一个名为quick_sort的函数,使用递归的方法来实现快速排序;2、检查数组的长度,如果长度小于等于1,则直接返回数组,否则,选择数组中的第一个元素作为枢纽元素(pivot),然后将数组分成比枢纽元素小和比枢纽元素大的两个子数组;3、将这两个子数组和枢纽元…

    2025年12月13日
    000
  • 如何用Python实现快速排序算法?

    如何用Python实现快速排序算法? 快速排序是一种常见而高效的排序算法,它能够在平均情况下以O(n log n)的时间复杂度对一个包含n个元素的列表进行排序。本文将介绍如何使用Python编写快速排序算法的代码示例。 快速排序的基本思想是选取一个元素作为基准(通常选择列表第一个元素),将列表分割成…

    2025年12月13日
    000
  • 如何对PHP数组进行快速排序?

    php中实现快速排序的步骤如下:1.选择数组第一个元素作为基准(pivot)。2.将小于pivot的元素放入$left数组,大于等于pivot的元素放入$right数组。3.递归地对$left和$right进行排序,并将结果合并。快速排序在php中虽然高效,但在数组已部分或完全有序时性能可能退化为o…

    2025年12月10日
    100
  • Java中快速排序的原理 图解快速排序的分治思想实现

    快速排序的核心在于分治思想,通过选取基准值将数组分为两个子数组并递归排序。1. 选择基准值(如首元素、随机或三数取中),2. 分区使小于基准值的在左、大于的在右,3. 递归对左右子数组排序。其平均时间复杂度为o(n log n),但最坏情况下可能退化到o(n^2)。相比其他算法,快速排序效率高且空间…

    2025年10月31日 java
    000

发表回复

登录后才能评论
关注微信