利用整数的范围一般是0~65535.我们就声明一个65535大小的数组exist[65535]然后,让待排序的数组a[]={1,2,3,4,5,1,6,3};
让数组a[]的每个值作为数组exist[]的下标,例如exist[a[0]] = exist[1] ++。由于出现了两个1,所以exist[1] = 2;
以此类推得到了exist[2] =1,exist[3] =2 ,exist[4]=1,exist[5] =1,exist[6] =1.
最后以exist[]下标为遍历,输出所有下标,并且根据值,就输出几次。
时间复杂度为O(n)
空间复杂度wie O(1)
#include <iostream>
using namespace std;
void paixu(int a[] ,int len)
{
#define MAXLEN 65535
int exist[MAXLEN]={0};
int i ,j;
for(i=0 ;i<len ;i++)
{
exist[a[i]]++;
}
for(j = 0 ;j<MAXLEN ;j++)
{
while(exist[j]!=0)
{
cout<<j<<endl;;
exist[j]--;
}
}
}
void main()
{
int a[]={1,5,7,8,12,0,34,56,23};
paixu(a,9);
}