快速排序

来源:互联网 发布:mac翻墙回国的软件 编辑:程序博客网 时间:2024/06/17 01:52

快速排序讲解

排序算法的最基本要义就是选取某个固定值当标准,大于等于它的放在右边,小于等于它的放在它的左边,算法解析,以下方的数组为例,初始的时候,数组0位空缺,用来放置标准值,初始的时候标准值等于啊a[1],end=10,start=1,i=start,j=end从右方开始找起,一直找到一个小于标准值50的,所以j=9,然后a[i]=a[j],(第二行)换过之后,从左边开始找起,一直找到一个大于50的值,一直找到大于50的,所以i=2,然后执行a[j]=a[i](第三行),再继续循环,一直等到i>=j的时候,便跳出循环,这时就是最后一步,将标准值与a[j]互换,形成一边小于标准值(1-3),一边大于等于标准值(4-10),在利用递归,将两个数组继续执行上诉过程,这样一遍遍的循环下去,便会将整个数组排序完成。


0

1

2

3

4

5

6

7

8

9

10

50

50

62

34

85

42

71

52

84

16

49

50

16

62

34

85

42

71

52

84

16

49

50

16

62

34

85

42

71

52

84

62

49

50

16

42

34

85

42

71

52

84

62

49

50

16

42

34

85

85

71

52

84

62

49

50

16

42

34

50

85

71

52

84

62

49

</pre><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp">#include<stdio.h>#include<stdlib.h>int main(){void Qsort(int a[],int i,int j);void print(int a[],int n);int a[]={0,50,62,34,85,42,71,52,84,16,49};print(a,10);printf("\n");Qsort(a,1,10);print(a,10);return 0;}void print(int a[],int n){int i;for(i=1;i<=n;i++){printf("%d  ",a[i]);}}void  Qsort(int a[],int start,int end){int i=start,j=end;a[0]=a[start];while(i<j){while(i<j&&a[j]>a[0]){j--;}if(i<j){a[i]=a[j];i++;}while(i<j&&a[i]<=a[0]){i++;}if(i<j){a[j]=a[i];j--;}}a[j]=a[0];if(start<j){Qsort(a,start,j-1);}if(j<end){Qsort(a,j+1,end);}}


                                             
0 0
原创粉丝点击