基础算法之排序--快速排序
来源:互联网 发布:mac pro拆解 编辑:程序博客网 时间:2024/05/29 19:04
/*************************************************************************************** Function : 快速排序* Create Date : 2014/04/21* Author : NTSK13* Email : beijiwei@qq.com* Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。* 任何单位和个人不经本人允许不得用于商业用途* Version : V0.1 *************************************************************************************** 基础算法之排序--快速排序 3 1 7 5 8 4 9 0 2 6步骤:1)选取base 为最左边的3,最小序号为0(left=0),最大序号为9(right=9)2)从最右边开始,向左查找到第一个小于base的数字,序列号为j,放在序号为0的位置,也就是取得base值的位置.3)从最左边开始,向右查找到第一个大于base的数字序列号为i,放在上次查找小于base的位置,序列号j4)循环执行 步骤2) 和 步骤 3) ,直到 i >= j. 此时序列号i的左侧全是小于base的数, 序列号i的右侧全是大于base的数,5)把base值放在序列号为i的位置6)分别递归调用left到 i-1, i+1到 right 进行快排注意 left小于right 是可以进行递归的条件.**************************************************************************************/ #include<stdio.h> #define MY_FUNC 1#if MY_FUNC #define M 10int data[M]={0};void quick_sort(int array[],int left,int right);// The first method:int main() { int i=0; freopen("input.txt","r",stdin); for(i=0;i<M;i++) scanf("%d",&data[i]); // get input data printf("Before quick sort : \n"); fflush(stdout); for(i=0;i<M;i++) { printf("%d \t",data[i]); fflush(stdout); } quick_sort(data,0,M-1); printf("\nAfter quick sort : \n"); fflush(stdout); for(i=0;i<M;i++) { printf("%d \t",data[i]); fflush(stdout); } return (0);} void quick_sort(int array[],int left,int right){ int base=array[left];//选定base int i=left;//左侧序号 int j=right;//右侧序号 if(left < right) { while(i<j) { //注意下边while循环里 i<j是必须加入的 while(i<j && array[j]>base)//right --> left 从数组最右侧 开始往左找比base小的数; 如果找到的话,放在最左边 j--; array[i]=array[j]; //注意下边while循环里 i<j是必须加入的 while(i<j && array[i]<base)//left -->right 从数组最左侧 开始往 找比base大的数; 如果找到的话,放在最右边 i++; array[j]=array[i]; } array[i]=base; quick_sort(array,left,i-1); quick_sort(array,i+1,right); } else return ;} /********************************************my function end**************************************************/ #else #define M 10int data[M]={0};int division(int a[],int left,int right);void quick_sort(int a[],int left,int right);// The second method: int main() { int i=0; freopen("input.txt","r",stdin); for(i=0;i<M;i++) scanf("%d",&data[i]); // get input data printf("Before quick sort : \n"); fflush(stdout); for(i=0;i<M;i++) { printf("%d \t",data[i]); fflush(stdout); } quick_sort(data,0,M-1); printf("\nAfter quick sort : \n"); fflush(stdout); for(i=0;i<M;i++) { printf("%d \t",data[i]); fflush(stdout); } return (0);} int division(int a[],int left,int right){ int base=a[left]; while(left<right) { while(left<right && a[right]>base) --right; a[left]=a[right]; while(left<right && a[left]<base) ++left; a[right]=a[left]; } a[left]=base; return left;}void quick_sort(int a[],int left,int right){ int i=0; if(left<right) { i=division(a,left,right); quick_sort(a,left,i-1); quick_sort(a,i+1,right); }}#endif
0 0
- 算法基础之排序篇-快速排序
- 基础算法之排序--快速排序
- 基础算法--排序:之快速排序
- 算法基础之排序—快速排序
- Java算法基础之快速排序算法
- Java算法基础之快速排序算法
- 【基础算法】排序-复杂排序之二(快速排序)
- 基础排序算法-快速排序
- 基础算法系列(十八)排序算法之快速排序
- 基础算法 快速排序
- 基础算法----快速排序
- 基础算法-快速排序
- 基础算法-快速排序
- 算法基础 快速排序
- [算法基础]快速排序
- 基础算法的总结之快速排序
- 【计蒜客】基础算法入门之快速排序
- 基础算法之四--排序:之快速排序
- php扩大年夜开收进建笔记 - observer - zhwquan - 战讯专
- Ajax学习笔记
- ORACLE建表空间,授权,导入,导出表
- VC++ MFC+GDIPlus 双缓冲解决闪烁问题
- 动态代理实现机制
- 基础算法之排序--快速排序
- 利用dispatch_once创建单例
- JS之RegExp对象(一)
- cocos2d-x 中文输出 GB2312与UFT8互转
- 4ping解决网络问题
- ubuntu 录音软件audacity 安装和使用
- Android APK反编译详解(附图)
- N的N次方 高校俱乐部线上编程挑战
- squid 3.1详细配置(2)