快速排序是一种时间复杂度不太稳定的排序算法,也是一种可运用分治策略的排序算法。 这篇就谈一下随机化版本的快速排序的问题,所以快排就给个代码,表示学过了: 随机化版本的快速排序,我比较迷惑的是产生随机数代码的地方,先看看代码(注释的部分): 这个小问题让我郁闷了一会儿,因为不这么写,随机化快排就不正确 ...
分类:
编程语言 时间:
2017-10-27 19:56:46
阅读次数:
193
快速排序,正如其名,是在平均情况下速度最快的排序,在平均情况下为2ln2(nlogn),大约为1.39nlogn,在同样复杂度为O(nlogn)的排序算法中,是常系数最小的算法,其最坏情况虽然可以高达O(n^2),但是采用改进的随机化快排算法,可以极大的降低最坏情况的出现概率。不仅如此,快速排序还是 ...
分类:
编程语言 时间:
2017-03-30 17:56:40
阅读次数:
232
1、随机化快速排序算法(1)、快速排序的坏处:完全顺序/完全逆序时时间复杂度为:O(n^2),其余的情况时间复杂度为:O(nlogn),算法的效率与输入顺序有关;(2)、随机选择主元,好处:其运行时间不依赖于输入序列的顺序,算法的效率与输入的顺序无关;(3)、最差的情况由随机数产生..
分类:
其他好文 时间:
2017-02-18 09:55:50
阅读次数:
248
procedure qs(l,r:integer);var i,j,x,t:integer;begin i:=l; j:=r; x:=a[l+random(r-l)+1]; repeat while (a[i]<x) do inc(i); while (a[j]>x) do dec(j); if i ...
分类:
其他好文 时间:
2016-10-20 15:17:57
阅读次数:
159
快排是我们比较熟悉的排序算法,时间复杂度最佳为O(nlogn),最坏为O(n2)随机化快排只是通过换轴将产生最坏情况可能性降低 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int....
分类:
其他好文 时间:
2015-11-07 13:22:07
阅读次数:
164
以下摘自网络 随机化快排:快速排序的最坏情况基于每次划分对主元的选择。基本的快速排序选取第一个元素作为主元。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为主元。这种情况下虽然最坏情况仍然是O(n^2),但最坏情况不再依赖于输入数据,而...
分类:
编程语言 时间:
2015-02-10 10:33:02
阅读次数:
257
随机化快排快速排序的最坏情况基于每次划分对主元的选择。基本的快速排序选取第一个元素作为主元。这样在数组已经有序的情况下,每次划分将得到最坏的结果。一种比较常见的优化方法是随机化算法,即随机选取一个元素作为主元。这种情况下虽然最坏情况仍然是O(n^2),但最坏情况不再依赖于输入数据,而是由于随机函数取...
分类:
其他好文 时间:
2014-10-14 11:48:38
阅读次数:
190
前一篇文章讲到了选择枢纽元的几种方法,其实第二种是随机选择元素作为枢纽元。那么在这篇文章里就实现一个随机化排序。算法与前面《算法导论》里的例子差不多,只是在调用分割Partition时加入一个随机数,具体可以参看程序。PowerBetC语言代码为:01#include "stdio.h"02#inc...
分类:
其他好文 时间:
2014-09-13 18:32:35
阅读次数:
206
一、 快速排序的描述
1、 快速排序是一种原地排序的算法,最坏情况下的时间复杂度为Θ(n^2),期望的运行时间为Θ(n logn),且其中隐含的常数因子较小。
2、 快速排序分三个步骤:
分解:数组A[p...r]被划分成两个数组A[p...q-1]和A[q+1...r],使得A[p...q-1]中的元素都小于等于A[q],A[q+1...r]中的元素都大于等于A[q]。下标q在这个划分过程...
分类:
其他好文 时间:
2014-07-08 15:31:28
阅读次数:
203