快速排序
思想:不断地将数组一分为二其中左半部分全都小于有半部分的数,直到数组全都有序为止。
简单起见,这里的中间分割值设为数组的第一个数。分割结束的标志是从左到右的索引left和从右到左的索引right相等。
代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int partSort(vector<int> &A, int left, int right){
int key = A[left];
while (left < right){
while (left < right && A[right] >= key) right--;
A[left] = A[right];
while (left < right && A[left] <= key) left++;
A[right] = A[left];
}
A[left] = key;
return left;
}
void quickSort(vector<int> &A, int left, int right){
if (left >= right)
return;
int k = partSort(A, left, right);
quickSort(A, left, k - 1);
quickSort(A, k + 1, right);
}
int main(void){
vector<int> A;
int val;
int n;
cin >> n;
for (int i = 0; i < n; ++i){
cin >> val;
A.push_back(val);
}
quickSort(A, 0, n - 1);
for (int i = 0; i < n - 1; ++i){
cout << A[i] << " ";
}
cout << A[n - 1];
cout << endl;
}