函数声明为viod QS(int a[], int l , int r),其中第一个参数表示一维数组,第二个参数表示数组中要排序的范围的左边界,第三个参数表示数组中要排序范围的右边界。注意左右边界都可以取到,比如数组a内容为{1, 3, 5, 7, 10, 90, 33},l = 0,r = 6,表示对数组中下标从0到6这七个数进行排序。
#include <iostream>
using namespace std;
int a[100010];
void QS(int a[], int l, int r){
if(l >= r) return;
int i = l - 1;
int j = r + 1;
int mid = a[l + r >> 1];
while(i < j){
do i++; while(a[i] < mid);
do j--; while(a[j] > mid);
if(i < j) swap(a[i], a[j]);
}
QS(a, l, j);
QS(a, j+1, r);
}
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
QS(a, 0, n-1);
for(int i = 0; i < n; i++) cout << a[i] << ' ';
cout << endl;
return 0;
}