剑指offer- hash排序

    xiaoxiao2021-03-25  158

    题目描述:我们想对公司所有员工(几万名)的年龄排序。要求时间复杂度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; } } }
    转载请注明原文地址: https://ju.6miu.com/read-15822.html

    最新回复(0)