排序
void quick_sort(int a[],int l, int r) {
if (l >=r)
return;
int mid = a[l] , i = l - 1, j = 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]);
}
quick_sort(a,l, j);
quick_sort(a,j+1,r);
}
void gb_sort(int l, int r) {
if (l >= r)
return;
int mid = (l + r) >> 1;
gb_sort(l,mid);
gb_sort(mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r){
if(a[i]>=a[j]){
b[k++]=a[j++];
}
else
b[k++]=a[i++];
}
while(i<=mid){
b[k++]=a[i++];
}
while(j<=r){
b[k++]=a[j++];
}
for(int i=l,j=0;i<=r;j++,i++){
a[i]=b[j];
}
}