排序算法很多,但是最快的排序算法算法复杂性是nlogn,我想到一个方法算法时间复杂性是n,但是也有很多限制。
比如我们要排序n个数,最大值与最小值的差值为m,则申明一个大小为m的数组ary,则ary【0】表示最小的那个数,ary【0】的值表示那个数有几个。
#include <stdio.h>
#include <time.h>
#define N 1000
int main()
{
int a[N];
int i;
srand(time(NULL));
//随机生成一个数组
for(i = 0 ; i < N ; i++)
{
a[i] = rand()%100; //数的大小在0到100之间
}
int b[100];
for(i = 0 ; i < 100 ; i++)
b[i] = 0; //初始化
//排序
for(i = 0 ; i < N ; i++)
{
b[a[i]]++;
}
//输出排序结果
for(i = 0 ; i < 100 ; i++)
{
while(b[i] > 0)
{
printf("%d ",i);
b[i]--;
}
}
return 0;
}