快速排序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,直到前进到一样的位置是停止,停止的那个位置就是分割线

*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

快速排序(2KB)

2.快速排序

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

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

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

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

#include #include /* 随机快速排序算法,每次随机产生一个p...r之间的数作为主元交换对象,用于分割数组。 */ void exchange(int *a,int i,int...

快速排序(2)算法改进--小的子文件、三者取中、重复关键字三路划分

标签(空格分隔): 排序算法 1. 小的子文件由于快速排序会递归的调用自身的许多小文件,因而要对小的子文件尽可能使用高效的算法 三者取其中快速排序 重复关键字-三路划分快速排序

算法复习(2) 快速排序

关于快速排序,一般都认为是通常情况下性能最好的,也确实是。因此对其的讨论都是在于如何能够使它更快。因此看一下快排的一般版本和随机版本。//一般版本 int Partition(int* arr, in...

【上机笔试之四】快速排序(2)

这里介绍快速排序的应用,C++自带的快速排序函数,能够定义比较复杂的排序规则。每个结构体包含名字、年龄和分数。规则定义:将学生信息按成绩进行排序,成绩相同的则按照姓名的字母序进行排序。然后输出学生信息...

算法精解----快速排序2

前面排序方法有个很明显的bug就是递归次数很多,而且递归进去的时候什么也不干。这样非常浪费CPU资源,所以呢,现在说说另外一种快速排序的方法,这种方法和前面的不同,前面的方法是K值分别和大于它的值和小...

《算法导论》学习笔记(2)——快速排序

快速排序,是一种基于分治思想的排序算法。分治,简单来说就是“大事化小”,从而达到最基本的问题,然后再将其合一。          在快速排序算法中,每次需要把一个数组A[p...r]分为三部分: A[...

2、快速排序(QuickSort)-C#实现

最近想学习算法,所以还是从排序算法练练手,这里分析一下快速排序的思想和C#语言实现,若有不正确之处,请批评指正,笔者不胜感激,若有志同道合的朋友,可以加本人QQ:491880231,一起畅谈码农的世界...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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