1 /************************************************************************************** 2 * Function : 快速排序 3 * Create Date : 2014/04/21 4 * Author : NTSK13 5 * Email : beijiwei@qq.com 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 7 * 任何单位和个人不经本人允许不得用于商业用途 8 * Version : V0.1 9 *************************************************************************************** 10 基础算法之排序--快速排序 3 1 7 5 8 4 9 0 2 6 11 12 步骤: 13 1)选取base 为最左边的3,最小序号为0(left=0),最大序号为9(right=9) 14 15 2)从最右边开始,向左查找到第一个小于base的数字,序列号为j,放在序号为0的位置,也就是取得base值的位置. 16 3)从最左边开始,向右查找到第一个大于base的数字序列号为i,放在上次查找小于base的位置,序列号j 17 18 4)循环执行 步骤2) 和 步骤 3) ,直到 i >= j. 此时序列号i的左侧全是小于base的数, 序列号i的右侧全是大于base的数, 19 20 5)把base值放在序列号为i的位置 21 22 6)分别递归调用left到 i-1, i+1到 right 进行快排 23 24 注意 left小于right 是可以进行递归的条件. 25 26 **************************************************************************************/ 27 #include28 29 #define MY_FUNC 1 30 #if MY_FUNC 31 32 #define M 10 33 int data[M]={ 0}; 34 35 void quick_sort(int array[],int left,int right); 36 37 // The first method: 38 int main() 39 { 40 int i=0; 41 42 freopen("input.txt","r",stdin); 43 44 for(i=0;i base)//right --> left 从数组最右侧 开始往左找比base小的数; 如果找到的话,放在最左边 80 j--; 81 array[i]=array[j]; 82 83 //注意下边while循环里 i right 从数组最左侧 开始往 找比base大的数; 如果找到的话,放在最右边 85 i++; 86 array[j]=array[i]; 87 } 88 array[i]=base; 89 90 quick_sort(array,left,i-1); 91 quick_sort(array,i+1,right); 92 } 93 94 } 95 96 /********************************************my function end**************************************************/ 97 #else 98 99 #define M 10 100 int data[M]={ 0}; 101 102 int division(int a[],int left,int right); 103 void quick_sort(int a[],int left,int right); 104 105 // The second method: 106 int main() 107 { 108 int i=0; 109 110 freopen("input.txt","r",stdin); 111 112 for(i=0;i base) 144 --right; 145 a[left]=a[right]; 146 while(left