快速排序2

原创 2011年01月18日 16:31:00

#include <iostream>

#include <time.h>

using namespace std;

int PARTITION(int A[],int p,int r)

{

int x=A[r];

int i=p;

int j=r;

while (i<j)  //当还没相等需要进行的步骤

{

//i前进将不符合的数与主元调换,进而放到合适的位置

while (i<j&&A[i]<=x)  //不能加上=因为两端都有=号就可能将相等的数分到两个不懂的集合中

{

i++;

}

if (i<j)    //此时A[i]>x

{

int t;

t=A[i];A[i]=A[j];A[j]=t;   //实质就是将主元与不符合左边集合的那个数互相交换,这时主元被放在j位置了

j--;

}

//j后退将不符合的数与主元调换,进而放到合适的位置

while (A[j]>=x&&i<j)

{

j--;

}

if (i<j)

{

int t;

t=A[j];A[j]=A[i];A[i]=t; //实质就是将主元与不符合左边集合的那个数互相交换,这时主元被放在i位置了

i++;

}

}

//相等时返回分割线的位置

return i;

}

void QuickSort(int A[],int p,int r)   //快速排序

{

if (p<r)    //只要有数就能进行快速排序

{

int q;

q=PARTITION(A,p,r);

QuickSort(A,p,q-1);  //前半部分进行快速排序

QuickSort(A,q+1,r); //后半部分进行快速排序

}

}

int main()

{

int number[20]={0};

int i;

srand((unsigned)time(NULL));

for(i=0;i<20;i++)

{

number[i]=rand()%100;

cout << number[i] << " ";

}

cout<< endl;

QuickSort(number,0,19);

for(i=0;i<20;i++)

{

cout << number[i] << " ";

}

cout<< endl;

return 0;

}

/*

1.从一端选定主元

2.再从另一端开始前进,当遇到不满足的数,就将其与主元交换

3.此时主元已经到了另一边,再从另外一边开始出发,当遇到不满足的数是,在将其与主元交换

4.重复的交替前进与交换,将不满足的数交换到满足条件的集合中并且主元也在越来越趋于分割线

5.重复2,3,直到前进到一样的位置是停止,停止的那个位置就是分割线

*/

快速排序算法的时间复杂度为什么是O(NlogN),还有O(N^2)

转载自:http://www.cnblogs.com/pugang/archive/2012/07/02/2573075.html 经常听人谈起各种排序算法的时间复杂度,这个是O(n2)的,...
  • iihtd
  • iihtd
  • 2016年04月15日 15:37
  • 1817

十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序

一.希尔(Shell)排序法(又称宿小增量排序,是1959年由D.L.Shell提出来的) /* Shell 排序法 */ #include void sort(int v[],int n) { ...
  • u011676589
  • u011676589
  • 2013年08月16日 08:01
  • 1745

1045. 快速排序(25)

著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的N个互不相同的正整数的排列,请问有多...
  • GQ_BOB
  • GQ_BOB
  • 2015年10月30日 23:21
  • 1747

快速排序(2KB)

  • 2006年02月23日 09:05
  • 1KB
  • 下载

算法入门--快速排序2(随机产生分割主元素)

#include #include /* 随机快速排序算法,每次随机产生一个p...r之间的数作为主元交换对象,用于分割数组。 */ void exchange(int *a,int i,int...
  • cfan0801
  • cfan0801
  • 2011年11月28日 20:13
  • 333

第十六周项目1(2)--验证算法之快速排序

问题及代码: /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1.cpp * 作 ...
  • sdchenzhe
  • sdchenzhe
  • 2016年12月15日 10:59
  • 136

NSGA 2 学习笔记 -- 快速排序

NSGA 2 使用了随机快速排序算法。 C. A. R. Hoare在1962年为了改进冒泡排序算法提出快速排序(Quicksort)算法。其基本思想是递归、分治。其时间复杂度为Ο(n log n)...
  • cocoonyang
  • cocoonyang
  • 2013年01月02日 02:48
  • 802

读取文件内的数据(数字)并进行三种排序,1(快速排序)2(归并排序)3(希尔排序)。

#include #include #include int n1=0; using namespace std; void Merge(int a[], int l...
  • weixin_39641975
  • weixin_39641975
  • 2017年12月21日 19:01
  • 26

2.快速排序

2.快速排序快速排序 前言 实现思路 实现代码 Main 前言快速排序可以说是所有排序算法里最常用、最优秀、最效率的算法。它是冒泡排序的改进版。就像它的名字一样,“快速”!实现思路实现思路是非常有趣的...
  • qq_16430735
  • qq_16430735
  • 2015年10月23日 22:14
  • 3902

【第十六周 项目1(2)—快速排序】

问题及代码: /*  * Copyright (c)2015级,烟台大学 计算机与控制工程学院  * All rights reserved.  * 文件名称:项目1.cpp  ...
  • weixin_35998801
  • weixin_35998801
  • 2016年12月15日 10:57
  • 664
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序2
举报原因:
原因补充:

(最多只允许输入30个字)