实现一个排序算法时间复杂度为O(n)

实现一个排序算法,要求时间效率为O(n)

  • 面试官:实现一个排序算法,要求时间效率为O(n)

  • 应聘者:对什么数字,有多少个数字

  • 面试官:对几万名公司员工的年龄

  • 应聘者:也就是说大小在一定的范围内是吧

  • 面试官:是的

  • 应聘者:可以使用辅助空间吗

  • 面试官:可以但是空间复杂度不能超过O(n)

我们遇到这个问题的思路。

  • 运行使用辅助空间,可以搞一个HashTable或者数组之类的辅助
  • 写代码的时候边界条件控制。第一位
  • 用一个数组记录每个年龄出现的此时。然后从0到n开始遍历
  • 然后从低位到高位遍历。根据当前年龄对应的次数数组,修改原来数组的排序。

废话不多说了,直接上代码。有错希望给指正~ 。

void SortAges(int ages[],int length){
//边界条件控制
if (ages == nullptr||length<=0) {
    return;
}

const int oldestAge = 99 ;
//记录每个年龄出现的次数
int timesOfAge[oldestAge+1];
//初始化数组
for (int i=0 ; i<=oldestAge; i++) {
    timesOfAge[i] = 0;
}
for (int i= 0; i<length; i++) {
    int age =  ages[i];
    if (age<0 || age>oldestAge) {
        return;
    }
    // 这个年龄出现的次数+1
    ++timesOfAge[age];
}
int index = 0;

for (int i =0 ; i<oldestAge; i++) {
    // 遍历次数的数组。根据年龄。
    for (int j =0 ; j<timesOfAge[i]; j++) {
        ages[index] = i ;
        ++ index;
    }
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,651评论 0 19
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • Pm
    qqqqqqqwww阅读 1,216评论 0 0
  • 很多时候,人总是愿意 生活在自己营造的假象之中 并且,由此展开联想 如同,花儿在夜里开得似是烂漫 当一个烂漫的孩子...
    仰山阅读 1,760评论 0 1

友情链接更多精彩内容