思路:
1)在你要排列的数中,确定一个基准点k,确定你要排序的数组的low下标、high下标
2)第一轮排序要达到使得k左边的数都小于k,k右边的数都大于k的效果。
3)递归分裂数据,分成左右两边进行排序,循环操作上面两步,退出条件为low>=high
#includevoid quickSort(int arr[], int low, int high) { if (low < high)//递归的退出条件,当low >= high,直接就可以递归退出函数 { int i = low; int j = high; int k = arr[low]; while (i < j)//使得k左边的数都小于k,k右边的数都大于k { //=号要么这里取,要么下面取,一定要取一个 while(i < j && arr[j] >= k) // 从右向左找第一个小于k的数 { //i <------- j j--; } if(i < j) { arr[i++] = arr[j];//做了判断,i++可以写成i,不做判断只能写成i } while(i < j && arr[i] < k) // 从左向右找第一个大于等于k的数 { //i ------> j i++; } if(i < j) { arr[j--] = arr[i];//做了判断,j--可以写成j,不做判断只能写成j } } arr[i] = k; // 递归调用 quickSort(arr, low, i - 1); // 排序k的左边 quickSort(arr, i + 1, high); // 排序k的右边 } } int main() { int i; int a[10] = {3, 1, 11, 5, 8, 1, 0, 3, 13, 81}; //排序前 printf("排序前:"); for(i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("n"); quickSort(a, 0, 9);//数据地址、数组最小下标、数组最大下标 //排序后 printf("排序后:"); for(i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("n"); return 0; }



