任何只是用比较的一般/通用排序算法,最坏时间复杂度都大于等于NlogN
但是,在某些特殊条件限制下,以线性时间排序仍然是可能的
桶式排序,数据必须只有小于M的正整数组成。最坏时间复杂度N+M
算法描述:
//使用一个大小为M的count数组(count有M个桶),初始化为0;
//扫描一遍待排序序列,当读pData[i]时,将count[pData[i]]加一;
//扫描数组count,打印出排序后的表。
由于比较简单,这里只给出C++实现,不在给出Python实现
void BucketSort(int *pData,int N) //假设pData元素为小于100的正整数
{
int count[100],i;
memset(count,0,sizeof(count));
for(i=0;i<N;i++)
{
count[pData[i]]++;
}
int j = 0;
for(i=0;i<100;i++)
{
while(count[i]!=0)
{
pData[j++] = i;
count[i]--;
}
}
}