快速排序:
选定一个用于划分区间的元素(主元),将数组分成两部分,左边值小于或等于主元值,右边值大于主元值。
int randPartition(int A[], int left, int right) {
int p = (1.0 *rand() / RAND_MAX * (right - left) + left); // #define RAND_MAX 0x7fff(stdlib.h) 32767
// swap(A[p], A[left]);
int t = A[p];
A[p] = A[left];
A[left] = A[p];
//Partition
int temp = A[left];
while (left < right) {
while (left < right && A[right] > temp) right--;
A[left] = A[right];
while (left < right && A[left] <= temp) left++;
A[right] = A[left];
}
A[left] = temp;
return left;
}
其中 p 为区间[left, right] 上的一个随机值。
void quickSort(int A[], int left, int right) {
if (left < right) {
int pos = randPartition(A, left, right);
quickSort(A, left, pos - 1);
quickSort(A, pos + 1, right);
}
}