<span style="font-family: Arial, Helvetica, sans-serif;">void swap(int& a, int& b) {</span>
// a = a ^ b; //这个为什么不行?如果是这样:swap(a[0],a[0])的话,a和b都为a[0],两个直接都等于0
// b = a ^ b;
// a = a ^ b;
int temp = a;
a = b;
b = temp;
}
一、动态判断
void QuickSort(int arr[], int left, int right) {
if(left < right) {
int i = left, j = right;
int T = arr[i];
while(i < j){
while(arr[j] >= T && i < j)
j--;
if(i < j) {
arr[i] = arr[j];
i++;
}
while(arr[i] < T && i < j)
i++;
if(i < j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = T;
QuickSort(arr, left, i);
QuickSort(arr, i + 1, right);
}
}
if(left < right) {
int i = left, j = right;
int T = arr[i];
while(i < j){
while(arr[j] >= T && i < j)
j--;
if(i < j) {
arr[i] = arr[j];
i++;
}
while(arr[i] < T && i < j)
i++;
if(i < j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = T;
QuickSort(arr, left, i);
QuickSort(arr, i + 1, right);
}
}
二、通过保持i,j之间的值都大于标准值,最后交换i+1和标准值
void QuickSort(int* A, int p, int r) {
int x = A[r];
int i = p - 1;
for(int j = p; j < r; j++) {
if(A[j] <= x) {
i++;
swap(A[i], A[j]);
}
}
swap(A[i+1], A[r]);
int x = A[r];
int i = p - 1;
for(int j = p; j < r; j++) {
if(A[j] <= x) {
i++;
swap(A[i], A[j]);
}
}
swap(A[i+1], A[r]);
QuickSort(A, p, i );
QuickSort(A, i + 2, r);
}
}