快速排序
2012-09-29 21:30
225 查看
#include<cstdio> #include<cstdlib> #include<cstring> using namespace std; int z[100],n; //快速排序的思想是递归 //以当前区间中的某个元素为基准 将比它小的放到前面 比它的放到后面 这样之后可以分而治之 因为以它为一个值的分界已经将比它小的放到了前半部分 比它大的放到了后面部分 这样便可以又对前半部分和后半部分执行同样的递归操作 最终完成排序 void qsort(int a,int b)//当前要处理a-b这个区间 { int c=a,d=b; int e=z[(a+b)>>1];//e是基准值 我们取这个区间中间的值作为基准值 当然其他的值也可以 int f;//f仅作为交换元素时的一个辅助变量 while(c<=d)//如果中间还有一段没有处理 { while(z[c]<e) c++;//找到一个大于等于基准值的数 while(z[d]>e) d--;//找到一个小于等于基准值的数 if(c<=d)//如果较大的那个数在较小的那个数之前 我们就需要交换这两个数的位置 { f=z[c]; z[c]=z[d]; z[d]=f;//交换 c++; d--; } } //这样做完一次之后 我们可以保证 (d+1)到(c-1)这个区间内的元素是有序的 if(c<b) qsort(c,b);//处理左边还未排序的区间 if(a<d) qsort(a,d);//处理右边还未排序的区间 } int main() { scanf("%d",&n);//读入有多少个数 for (int a=1;a<=n;a++) scanf("%d",&z[a]);//读入每一个数 qsort(1,n);//我们需要处理1-n这个区间里的所有数 //sort(z+1,z+n+1);//这是c++自带的那个函数 需要在前面加上 #include<algorithm> for (int a=1;a<=n;a++) printf("%d\n",z[a]);//输出 return 0; }
相关文章推荐
- 排序算法:快速排序
- 快速排序详解
- 排序算法--交换排序(冒泡排序、快速排序、随机快速排序)java实现
- 快速排序,一个爱情故事-java版
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
- PAT-B 1045. 快速排序
- 快速排序 C语言版
- 仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,以及输入搜索条件过滤,显示姓名的文字图片
- 洛谷 P1177 【模板】快速排序【13种排序模版】
- 快速排序
- java 快速排序随机选择key
- 【重温经典算法之二】快速排序
- 快速排序
- 快速排序
- js之快速排序
- Java常见排序算法之快速排序
- PHP实现快速排序
- 重点算法--快速排序
- 快速排序的随机化版本
- 快速排序