快速排序

来源:互联网 发布:怎样抢到淘宝秒杀产品 编辑:程序博客网 时间:2024/05/22 13:55

快速排序,一种不稳定但很nb的排序得意


快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(度娘解释)
到底啥意思?疑问

st解读:也就是说,一些数排成一列,从中间分为两段,辣么从两节开始,分别找数。先从第一节开始,如果这个数小于中间数不管,继续;else 比中间大,停下来,扫描第二节。从第二节开始,如果这个数大于中间数不管,继续;else 比中间小,停下来,与前面那个交换位置。     如此反复,就可以得到一个保证第一节每个数都比后面一节小。这是用递归手法,递归第一节,递归第二节。便可以得到一个从小到大排列的数列!


那么代码如何实现?疑问

答:递归!


上代码!

#include<stdio.h>#include<stdlib.h>#define MAX 1001int a[MAX];void qsort(int l,int r){//核心,凑合着看吧int i,j,k,m;i=l; j=r; m=a[(i+j)/2];do{    while (a[i]<m) i++;//找出那个大于m的数    while (a[j]>m) j--;//找出那个小于m的数    if (i<=j){//交换    k=a[i]; a[i]=a[j]; a[j]=k;    i++; j--;}}while (i<=j);if (l<j) qsort(l,j);//分别再递归if (i<r) qsort(i,r);}int main(){int n,i,j; scanf("%d",&n);for (i=1;i<=n;i++) scanf("%d",&a[i]);qsort(1,n);for (i=1;i<=n;i++)  printf("%d ",a[i]);puts(""); return 0;}


是不是恍然大悟了?大笑


跪求赞求访问求评论!

2 0
原创粉丝点击