剑指offer- hash排序

来源:互联网 发布:block matching算法 编辑:程序博客网 时间:2024/04/30 12:41

题目描述:我们想对公司所有员工(几万名)的年龄排序。要求时间复杂度O(n)。
分析:要排序的年龄在一个比较小的范围,假设最大的员工年龄是99。并且还可以用辅助内存。该方法用长度100的整数数组作为辅助空间换来了O(n)的时间效率。

void SortAges(int ages[], int length){    if(ages == NULL || length <=0)       return;    const int oldestAge = 99;    int timesOfAge[100];       //用来统计每个年龄出现的次数    for(int i =0; i <=oldestAge; ++i)      timesOfAge[i] = 0;      //初始化数组    for(int i =0; i <length; ++i)    {       int age = ages[i];       ++ timesOfAge[age];    //年龄作为数组的下标    }    int index = 0;    for(int i =0; i <=oldestAge; ==i)  //某个年龄出现了多少次,就在数组ages里设置几次年龄,这样就相当于给数组排序了。    {          for(int j = 0; j <timeOfAge[i]; ++j)        {           ages[index] = i;           ++ index;        }    }}
0 0
原创粉丝点击