快速排序
2015-12-03 22:32
411 查看
#include<stdio.h>
void swap(int* a,int* b){
int c=*a;
*a=*b;
*b=c;
}
int mid(int a[],int start.int end){
int p=(start+end)/2;
if(a[start]>a[p])swap(&a[start],&a[p]);
if(a[p]>a[end])swap(&a[p],&a[end]);p
if(a[start]>a[p])swap(&a[start],&a[p]);
swap(&a[p],&a[end]);
return a[end];
}
void quick(int a[],int start,int end){
if(start>=end)return;
int gg=mid(a,start,end); //得到flag
int i=start-1;
int j=end;
while(1){
while(a[++i]>gg) ;
while(a[--j]<gg) ;
if(i<j)
swap(&a[i],&a[j]);
else
break;
}
swap(&a[i],&a[end]); //对应mid()中swap(&a[p],&a[end])
quick(a,start,i-1);
quick(a,i+1,end);
}
int main(){
int a[10]={9,5,7,1,3,2,6,4,8,0};
quick(a,0,9);
int i=0;
while(i<10){
printf("%d\n",a[i]);
return 0;
}
void swap(int* a,int* b){
int c=*a;
*a=*b;
*b=c;
}
int mid(int a[],int start.int end){
int p=(start+end)/2;
if(a[start]>a[p])swap(&a[start],&a[p]);
if(a[p]>a[end])swap(&a[p],&a[end]);p
if(a[start]>a[p])swap(&a[start],&a[p]);
swap(&a[p],&a[end]);
return a[end];
}
void quick(int a[],int start,int end){
if(start>=end)return;
int gg=mid(a,start,end); //得到flag
int i=start-1;
int j=end;
while(1){
while(a[++i]>gg) ;
while(a[--j]<gg) ;
if(i<j)
swap(&a[i],&a[j]);
else
break;
}
swap(&a[i],&a[end]); //对应mid()中swap(&a[p],&a[end])
quick(a,start,i-1);
quick(a,i+1,end);
}
int main(){
int a[10]={9,5,7,1,3,2,6,4,8,0};
quick(a,0,9);
int i=0;
while(i<10){
printf("%d\n",a[i]);
return 0;
}
相关文章推荐
- android 事件分发机制
- 崽崽帮www.zaizaibang.com精选1
- 李沐等:MXNet设计和实现简介
- Last Day(Dec 3,2015)
- 多线程操作之线程概念
- file post 图片直接存储到数据库
- 计算机网络 一个http请求的详细过程
- Python脚本自动化编译RPM包
- 黑马程序员—javaSE—St 4000 ring&StringBuffer&StringBuilder
- 派生类和基类的关系
- 特征提取http://blog.csdn.net/passball/article/details/5204132
- Linux学习笔记(十三、关机和重启命令)
- mkyaffs2image的制作方法
- 蓝懿ios 技术内容和心得 12.3
- Python之路(二)
- leetcode之Perfect Squares
- 可运行jar包的几种打包/部署方式
- Freckles
- Flex布局(伸缩盒布局)
- scrapy