快速排序
一趟快速排序的算法是:
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
1 #include<stdio.h> 2 #define LEN 6 3 4 int quick_pass(int *array, int low, int high);//得到基准值应该存放的位置 5 void quick_sort(int *array, int low, int high)//快速排序 6 { 7 int mid;//存储基准值 8 9 if(low < high) 10 { 11 mid = quick_pass(array,low,high);//得到基准值应该存放的位置.array[mid]左边的全部比array[mid]小,右边全部比array[mid]大 12 quick_sort(array,low,mid-1);//对左边的数组递归进行快速排序。对左边排序 13 quick_sort(array,mid+1,high);//对左边的数组递归进行快速排序 对右边排序 14 } 15 } 16 17 int quick_pass(int *array, int low, int high)//得到基准值应该存放的位置 18 { 19 int tmp = array[low];//tmp保存基准值,此时array[low]位置可认为空 20 21 while(low < high) 22 { 23 while(low < high && tmp < array[high])//仍需要low<high条件是因为low和high在变化 24 high--;//从后往前找,直到找到比基准值小的,下标为high 25 if(low < high) 26 array[low] = array[high];//将比基准值小的放到空位置,此时array[high]位置可认为空 27 while(low < high && tmp > array[low])//再从前往后找,直到找到比基准值大的,下标为low 28 low++; 29 if(low < high) 30 { 31 array[high] = array[low];//此时array[low]可认为空 32 } 33 } 34 //此时array[low]为空,此位置正好是基准值的位置 35 array[low] = tmp; 36 37 return low;//返回基准值的位置 38 } 39 40 int main() 41 { 42 int test[LEN] = {4,3,5,9,11,8}; 43 int i; 44 45 quick_sort(test,0,LEN-1);//快速排序 46 47 48 for(i=0; i<LEN; i++) 49 { 50 printf("%d\t",test[i]); 51 } 52 printf("\n"); 53 54 return 0; 55 }

更多算法请移步
浙公网安备 33010602011771号