1003快速排序
2016-04-11 23:55
225 查看
我第一次写的快排:运行程序时发现可以,但是程序会超时
这是优化过的代码,边界条件更多,更难于理解一些
#include<stdio.h> void qsort(int low,int high,int *a); int main() { int a[10000]={0}; int n=0,i=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",a[i]); qsort(0,n-1,a); for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); return 0; } void qsort(int low,int high,int *a) { if(low<high) { int left=low,right=high,key=a[low]; while(left<right) { while(left<right&&a[right--]>key); a[left]=a[right]; while(left<right&&a[left++]<key); a[right]=a[left]; } a[left]=key; qsort(low,left-1,a); qsort(left+1,high,a); } }
这是优化过的代码,边界条件更多,更难于理解一些
#include<stdio.h> void qsort(int low,int high,int *a); int position(int low,int high,int *a); int main() { int a[10000]={0}; int n=0,i=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); qsort(0,n-1,a); for(i=0;i<n;i++) printf("%d\n",a[i]); return 0; } void qsort(int low,int high,int *a) { if(low<high) { int pos=position(low,high,a); qsort(low,pos-1,a); qsort(pos+1,high,a); } } int position(int low,int high,int *a) { int left=low,right=high+1,x; while(left<right) { while(left<high&&a[++left]<a[low]); while(a[--right]>a[low]); if(left>right) break; x=a[left]; a[left]=a[right]; a[right]=x; } x=a[low]; a[low]=a[right]; a[right]=x; return right; }
相关文章推荐
- java多态和动态绑定
- 射频中经常是用50欧姆作为阻抗匹配的标准的原因
- 线程运行机制
- WPF
- JS数组方法汇总 array数组元素的添加和删除
- Map、Set、List、Queue、Stack的特点与用法
- 网页四--按钮反应
- Centos搭建git服务器
- zeroclipboard复制反斜杠时不正确的解决办法
- Intellij Idea 使用笔记
- 详细分析HFSS、ADS、CST各自优缺点及应用范围,看看你到底应该学习哪种仿真?
- vertical-align: middle垂直居中
- 【转】彻底理解安卓里的ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹含义
- 【珍藏】linux 同步IO: sync、fsync与fdatasync
- 建立一个学生类及其相应对象
- struts2标签又显示不出来
- 关于this
- 【珍藏】linux 同步IO: sync、fsync与fdatasync
- c++作业03
- OC与JS的交互