快速排序
来源:互联网 发布:怎样抢到淘宝秒杀产品 编辑:程序博客网 时间: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
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- PAT-A1077. Kuchiguse (20)(模拟)
- xib自定义UIView报错误 "forUndefinedKey:]: this class is not key value coding-compliant for the key"
- Android Studio 1.3及以上 NDK环境配置
- 第一次写博客
- HTML+CSS(简单入门)例子
- 快速排序
- PAT-1082. Read Number in Chinese (25)(模拟)
- set集中查找find
- Android布局的各种对齐问题
- golang捕获ctrl+c退出程序
- c语言实现求最短路径(迪杰斯特拉算法,《数据结构》算法7.15)
- http协议三次握手
- C# 开放类型与封闭类型
- PAT-A1028. List Sorting (25)(排序.)