今天有空看了一下快速排序算法,发现书上和网上都是将升序的, 故仿代码写了个降序的,其实就改了两处判断,程序中有标出。 void QuickDesc(int arr[], int start, int end) { if(start < end) { int q = Partition(arr, start, end); //分治的思想, //start至q是大于等于arr[start]的元素, //(q+1)至end是小于等于arr[start]的元素 QuickDesc(arr, start, q); QuickDesc(arr, q + 1, end); } } int Partition(int arr[], int start, int end) { int x = arr[start]; int i = start - 1; int j = end + 1; while(1) //一直到i>=j { do //从后面找到第一个不小于x(即arr[start])的元素 { j--; }while(x > arr[j]); //升序是 < do //从后面找到第一个不大于x(即arr[start])的元素 { i++; }while(x < arr[i]); //升序是 > if( i < j) { //交换 arr[i] 、arr[j] int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } else { //分堆放至置后中间的标志位(不是正中间) return j; } } }