问题描述
int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N) 。
分析问题
就已知的算法中,最小的时间见复杂度为O(N lgN):堆排序,快排,归并排序。
题目中的数组元素中的数据范围比较小,最小为12,最大为17。
可以考虑鸽巢排序
(1)找出排序数组中数据的范围,创建计数的数组count
(2)遍历数组,存放到count[array[i]]++
(3) 遍历计数数组,进行排序
void pigeonhole_sort(int array[], int length)
{
//先找出最大值和最小值
int min = array[0];
int max = array[0];
for (