题目描叙:给定长度为n的一列数,数的绝对值都小于10000,要求从小到大排序。
本题不适合用桶排序,因为给的是数的绝对值,桶排序的范围需要从-10000到10000,范围过大造成时间浪费,用快速排序比较好,上代码:
#include<stdio.h>
int a[201], n;
void quick(int left, int right)
{
int i, j, t, temp;
if(left > right)
return;
i = left;
j = right;
temp = a[left];
while(i != j)
{
while(a[j] >= temp && j > i)
{
j--;
}
while(a[i] <= temp && j > i)
{
i++;
}
if(i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quick(left, i - 1);
quick(i + 1, right);
return;
}
int main()
{
int i, j;
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
quick(0, n - 1);
for(i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}