jjzjj

quickSort

全部标签

c++ - QuickSort 比 std::sort 慢

我有一个quick_sort代码(С++),看起来像这样templateBidirectionalIteratorquick_sort_partition(BidirectionalIteratorleft,BidirectionalIteratorright,Comparecmp){BidirectionalIteratorq=left-1;std::mt19937gen(time(0));std::uniform_int_distributionuid(0,right-left-1);intpivot_1=uid(gen);BidirectionalIteratorrandomNu

c++ - 三向快速排序需要更高的性能

我目前正在尝试实现三分区快速排序。下面的代码工作正常,但运行时间不够。我对数据结构、算法和一般的“深入”编程都不熟悉,所以我尝试摆弄它以使其在更短的时间内工作的尝试基本上没有成功。(内存性能很好。)我的直觉是改变主元,但我担心这不是三路快速排序。#include#include#includeusingstd::vector;usingstd::swap;intpartition3(vector&a,intl,intr){intx=a[l];intj=l;intk=r;inti=l+1;while(ix){swap(a[i],a[k]);k--;}else{i++;}}returnj;

c++ - 使用快速排序在 C++ 中排序可视化工具错误

因此,当我使用名为splashkit的游戏制作库创建此排序可视化工具时,(我知道它并不理想,但这是我的类(class)教我的内容)我试图显示整个数组并显示每个单独的交换。但它却这样做了:Videoofmybug我没有理解代码的逻辑,因为我按照教程来实现这一点。排序本身很好并且效果很好但是矩形的绘制很奇怪,而不是我想要实现的目标。Iwouldliketoachievesomethinglikethis.(没有颜色/声音效果)。代码更新:#include"splashkit.h"#defineNUM_VALS200voiddraw_values(constintvalues[],intsi

c++ - 如何按特定单元格对二维数组进行快速排序?

我有一个二维数组,我想用C++中给定的qsort()函数对其进行快速排序:unsignedwork[N][3];我想按第三个索引对“工作”数组进行排序...所以如果work[i]在work[j]之前如果工作[i][2]>工作[j][2]。我知道我需要使用一个函数来比较它,但我不知道该怎么做。编辑:如果我执行以下操作,会有帮助吗:unsignedwork[3][N];qsort(work[2],N,sizeof(unsigned),compare);比较如下:intcompare(constvoid*a,constvoid*b){return(*(unsigned*)a-*(unsign

c++ - 在双向迭代器上实现快速排序

使用具有O(NlgN)时间和O(lgN)空间的双向迭代器实现快速排序似乎非常简单。那么,std::sort()需要随机访问迭代器的特殊原因是什么?我已阅读有关该主题的文章whydostd::sortandpartial_sortrequirerandom-accessiterators?.但它没有解释可能的std::sort()实现的具体部分可能实际上需要随机访问迭代器来维持其时间和空间复杂度。O(NlgN)时间和O(lgN)空间的可能实现:templateBidirItpartition(BidirItfirst,BidirItlast,Predpred){while(true){w

c++ - 在 C++ 中使用多线程进行快速排序

我使用多线程方法实现了一个quicksort程序,在C++中有一个Portfolio任务。Themethodofportfoliotasksistomaintainaqueueoftasks.Eachfreethreadpicksataskfromtheportfolio,executesit,ifnecessarygeneratingnewsubtasksandplacingthemintotheportfolio但我不确定什么是对的!在我看来,在一个thread中,该算法比两个或四个thread运行得更快。我能以某种方式搞乱同步吗?感谢任何人帮助我。代码:#include#incl

c++ - 如何在避免代码重复和名称冲突的同时实现同一算法的多个版本?

我用C++开发了插入排序和快速排序算法。现在,我打算创建至少四种快速排序算法的变体。他们在如何选择主元以及是否对小列表使用插入排序方面会有所不同。在Java或C#中,为避免代码重复和名称冲突,我会在单独的类文件中实现每个版本的Quicksort算法并使用继承。具体来说,我会创建以下类:QuicksortFixedPivotQuicksortRandomPivotQuicksortFixedPivotInsertion-使用插入排序对最多k个元素的子数组进行排序QuicksortRandomPivotInsertion但是,根据我的理解,像Quicksort这样的“独立”算法通常不会在C

c++ - 快速排序实现

以下快速排序代码不起作用,我不明白是什么原因。#includeusingnamespacestd;voidexch(inta[],inti,intj){ints=a[i];a[i]=a[j];a[j]=s;}intpartition(inta[],intl,inth);voidquick(inta[],intl,inth){if(hv)if(j==i)break;if(i>=j)break;exch(a,i,j);}exch(a,i,h);returni;}intmain(){inta[]={12,43,13,5,8,10,11,9,20,17};intn=sizeof(a)/size

c++ - 快速排序代码解释

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。这是我在实现快速排序算法时遇到的代码。你能在这里解释一下递归是如何工作的吗?voidquickSort(intarr[],intleft,intright){inti=left,j=right;inttmp;intpivot=arr[(left+right)/2];/*partition*/while(ipivot)j--;if(i请注意,这不是家庭作业。

java - 为什么合并排序用于 Android/Java API 中的对象?

JavaArrays.sort()对于原始类型使用快速排序。另一方面Arrays.sort()对于对象使用合并排序。而且,同样适用于Collection.sort()它也使用合并排序。集合排序在下面使用数组排序实现。因此,从简单的意义上讲,我可以说基元是使用快速排序进行排序的,而对象是使用合并排序进行排序的。我的猜测是它与排序算法本身有关。关于快速排序与合并排序的SO有很多讨论,例如this和this.关于哪个更好,似乎存在相互矛盾的说法,这是可以理解的,因为这取决于数据集。我的理解是就位:快速排序获胜。合并排序可以就地实现链表外部存储数据:合并排序胜出。排序列表(由任何形式的链表支持