快速排序

49 38 65 97 76 13 27——————49原始

27 38 65 97 76 13 49——————49   1次

27 38 49 97 76
13 65——————49   2次

27 38 13 9776 49 65——————49   3次

27 38 13 49 76 97 65——————49   4次

一趟快速排序

 

排序1:

#include <iostream>
#include <time.h>
#define ARYSIZE 100000
using namespace std;
void QuickSort(int ary[], int nBegin, int nEnd)
{
int tKey = ary[nBegin];
int tLeft = nBegin;
int tRight = nEnd;//以第一个数为参照做比较
if(tLeft >= tRight)
{
return;
}
while(tLeft < tRight)
{
while(tLeft < tRight && ary[tRight] >= tKey)
{
tRight--;
}
ary[tLeft] = ary[tRight];
while(tLeft < tRight && ary[tLeft] <= tKey)
{
tLeft++;
}
ary[tRight] = ary[tLeft];
}
ary[tRight] = tKey;
QuickSort(ary, nBegin, tRight-1);
QuickSort(ary, tRight+1, nEnd);//递归
}
int main(int argc, char *argv[])
{
int ary[ARYSIZE] = {0};
srand((unsigned int)time(NULL));
for (int i = 0; i < ARYSIZE; ++i)
{
ary[i] = rand() % 100;
}
QuickSort(ary, 0, ARYSIZE - 1);
getchar();
}

排序1比较块;

 

排序2:

#include <iostream>
#include <time.h>
#define ARYSIZE 100000
using namespace std;
void swap(int *a, int *b)
{
int t=*a; *a=*b; *b=t;
}
void QuickSort(int arr[], int beg, int end)
{
if (end >= beg + 1)
{
int piv = arr[beg], k = beg + 1, r = end;
while (k < r)
{
if (arr[k] < piv)
{
k++;
}
else
{
swap(&arr[k], &arr[r--]);
}
}
if (arr[k] < piv)
{
swap(&arr[k],&arr[beg]);
QuickSort(arr, beg, k);
QuickSort(arr, r, end);
}
else
{
if (end - beg == 1)
{
return;
}
swap(&arr[--k],&arr[beg]);
QuickSort(arr, beg, k);
QuickSort(arr, r, end);
}
}
}
int main(int argc, char *argv[])
{
int ary[ARYSIZE] = {0};
srand((unsigned int)time(NULL));
for (int i = 0; i < ARYSIZE; ++i)
{
ary[i] = rand() % 100;
}
QuickSort(ary, 0, ARYSIZE - 1);
getchar();
}

时间: 2024-10-03 23:15:35

快速排序的相关文章

c++-类中某元素的快速排序

问题描述 类中某元素的快速排序 怎么改正可以再排列类中元素nodes[i].degree_num时排列i?我的程序只能排列degree_num 先开始试了第二幅图注解掉的绿色代码,出现了图一情况 我传递的数组 i 0 1 2 3 4 5 6 7 8 a[i] 10 9 8 7 6 5 4 3 2 a[i].degree_num 1 1 1 4 3 1 1 3 1 如何对快速排序改变一下使得能按照第三行重新排列数组内的值第二行 解决方案 a[i]是第2行 a[i].degree_num是第三行 手

c++-C++快速排序的程序填空!求大神

问题描述 C++快速排序的程序填空!求大神 5C 感觉跟书上的程序有点不太一样,求大神帮忙! 解决方案 1.vp判断是否大于sp2.判断vp是否小于ep3.temp = ip的值4.jp-->sp5.break6.ip的值 = jp的值,jp的值=temp:7.3和6的组合(交换值)第四部判定条件需要你在测试一下 解决方案二: 每天回帖即可获得10分可用分

JS实现随机化快速排序的实例代码

这篇文章介绍了JS实现随机化快速排序的实例代码,有需要的朋友可以参考一下   算法的平均时间复杂度为O(nlogn).但是当输入是已经排序的数组或几乎排好序的输入,时间复杂度却为O(n^2).为解决这一问题并保证平均时间复 杂度为O(nlogn)的方法是引入预处理步骤,它惟一的目的是改变元素的顺序使之随机排序.这种预处理步骤可在O(n)时间内运行.能够起到同样作用的 另一种简单方法是在算法中引入一个随机元素,这可以通过随机地选择拆分元素的主元来实现.随机选择主元的结果放宽了关于输入元素的所有排列

PHP7 RC7 Release对比PHP5.6快速排序20000数据性能体验以及新语法尝鲜

最近Zend的PHP7已经 处于最后的BUG修复阶段,目前 已经更新RC7,对于Zend官方的说法PHP7的性能大约相比PHP5系列版本 提高2倍以上,增加了一些新的语法,摒弃了PHP5的一些影响性能的因素,主要增加了以下Features . Improved performance: PHP 7 is up to twice as fast as PHP 5.6 性能比5.6提高2倍 Consistent 64-bit support 64位一致性支持Many fatal errors are

快速排序:PHP 快速排序

<?php  //Quick Sort  function quickSort(array $array){  static $run = 0;  $len = count($array);  if($len <= 1) return $array;  $arrleft=array();  $arrright=array();  $flag = $array[0];  for($i=1;$i<$len;$i++){  if($array[$i]<=$flag){  $arrleft

【算法】C#快速排序类

排序|算法 快速排序的基本思想是基于分治策略的.对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理: 分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值. 递归求解(Conquer):通过递归对p..aq和aq+1..ar进行排序. 合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算a

如何实现快速排序算法

快速排序: 代码: <?php /** 快速排序算法 * 1. 在数组中找一个元素作为key,一般取数组第一个元素作为key * 2. i=0, j=数组长度-1 * 3. j-- 当 arr[j]<key, arr[i]与arr[j]交换位置 * 4. i++ 当 arr[i]>key, arr[i]与arr[j]交换位置 * 5. 重复3,4 直到 i==j 时,完成. * 6. 将key分隔的左右两组元素再分别执行 1,2,3,4,5 (递归). */ $arr = array()

冒泡、二分法插入及快速排序算法

1.冒泡排序算法 过程: 1.遍历整个数组,每两两相邻的元素进行比较,如$a[$i]>$a[$i+1]则互换位置,每次比较消除一个逆序. 2.每一次循环后,下次再需要循环的次数减少1. <?php // 冒泡排序 $arr = createarr(20); printarr($arr); popsort($arr); printarr($arr); function createarr($num=10){ $arr = array(); for($i=0; $i<$num; $i++){

快速排序算法

上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2).假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人.那有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6  1  2 7  9  3  4  5 10  8&quo

Scala的快速排序

真的是越来越喜欢Scala了,简洁的语法,清新的风格是我对Scala的印象,感觉使用Scala进行编程真的非常的方便,从Scala的设计思想也能得到不少的启发,就比如下面的一个对数字数组快速排序的sort(Array[Int])方法,你以前想到过通过这样的方式实现吗? /** * 快速排序的例子2 * @author VWPOLO * <p>2009-8-12</p> */ object TestQuickSort2 { def main(args : Array[String])