#include <stdio.h>
#define MAXLEN 100
int a[MAXLEN];
void swap(int a[] , int i , int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
int split(int a[] , int left , int right) {
int i = left , j = right;
int p = (left + right) / 2;//将枢轴设在中点
int piv = a[p];//将枢轴元素记录在piv变量中
while ( i < j ) {//在分离序列的过程中枢轴指向的元素将视为1效空位处理
while ( i < p && a[i] <= piv )
i++;
if ( i < p ) {//将比枢轴大的元素送到后面,同时将枢轴指向前面以保证枢轴坐标比高位坐标小
a[p] = a[i];
p = i;
}
while ( j > p && a[j] >= piv )
j--;
if ( j > p ) {//将比枢轴小的元素送到前面,同时将枢轴指向后面以保证枢轴坐标比低位坐标大
a[p] = a[j];
p = j;
}
}
a[p] = piv;//将保存好的枢轴值赋到枢轴坐标位置
return p;
}
void qsort(int a[] , int left , int right) {
if ( left < right ) {
int p = split(a , left , right);
qsort(a , left , p - 1);//下标出现减号所以用int替换size_t
qsort(a , p + 1 , right);
}
}
int main() {
int len;
scanf("%d" , &len);
int i;
for ( i = 0 ; i < len ; i++ )
scanf("%d" , a + i);
qsort(a , 0 , len - 1);
for ( i = 0 ; i < len ; i++ )
printf("%d " , a[i]);
return 0;
}
测试数据(两组,执行两次):
5 input
5 4 3 2 1
1 2 3 4 5 output
7 input
3 45 12 34 5 44 8
3 6 8 12 34 44 45 output