两个版本的区别就在于swap
补充:随机快排
int Partition(vector<int> &numbers, int st, int ed) {
srand((unsigned)time(NULL));
int pos = rand() % (ed-st+1) + st;
swap(numbers[st], numbers[pos]);
int tem = numbers[st];
while(st < ed) {
while(st < ed && tem <= numbers[ed]) ed--;
numbers[st] = numbers[ed];
while(st < ed && tem >= numbers[st]) st++;
numbers[ed] = numbers[st];
}
numbers[st] = tem;
return st;
}
版本一
int partition(int arr[], int left, int right){
int tem = arr[left];
while(left < right){
while(left < right && tem <= arr[right]) right--;
arr[left] = arr[right];
while(left < right && tem >= arr[left]) left++;
arr[right] = arr[left];
}
arr[left] = tem;
return left;
}
void sort(int arr[], int left, int right){
if(left < right){
int pos = partition(arr, left, right);
sort(arr, left, pos-1);
sort(arr, pos+1, right);
}
}
版本二
int partition(int arr[], int left, int right){
int tem = arr[left], i = left, j = right;
while(i < j){
while(i < j && tem <= arr[j]) j--;
while(i < j && tem >= arr[i]) i++;
if(i < j){
int ttem = arr[i];
arr[i] = arr[j];
arr[j] = ttem;
}
}
arr[left] = arr[i];
arr[i] = tem;
return i;
}
void sort(int arr[], int left, int right){
if(left < right){
int pos = partition(arr, left, right);
sort(arr, left, pos-1);
sort(arr, pos+1, right);
}
}