#include <stdio h=""> #include <stdlib h=""> void QuickSort(int *a ,int left , int right) { ///如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了 ///递归结束条件 if(left >= right) { return; } int i = left; int j = right; int key = a[left]; while(i<j) { while(i<j && key <= a[j]) { j--; } a[i]=a[j]; /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是 ///a[left],那么就是给key)*/ while(i < j && key >= a[i]) /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反, 因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/ { i++; } a[j] = a[i]; } a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/ QuickSort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/ QuickSort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/ /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/ } int main() { int i; int num[]={9,8,5,84,23,1,585,2,1,0}; QuickSort(num,0,sizeof(num)/sizeof(int)-1); for(i=0;i<sizeof(num)/sizeof(int);i++) { printf("%d ",num[i]); } printf("\nok\n"); return 0; } </stdlib></stdio>