美文网首页程序猿阵线联盟-汇总各类技术干货
实现一个排序算法时间复杂度为O(n)

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

作者: 沧州宁少 | 来源:发表于2017-11-06 19:07 被阅读0次

实现一个排序算法,要求时间效率为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;
    }
}
}

相关文章

  • 6. 归并排序

    归并排序:算法时间复杂度O(nlogn) 空间复杂度O(n) 算法实现

  • Java基本算法实现和区别

    算法实现 直接插入排序 时间复杂度:O(n2) 希尔排序 时间复杂度:O(n1.3) 冒泡排序 时间复杂度:O(n...

  • 算法基础|排序算法时间复杂度

    常见的7种排序算法时间复杂度: 1)直接插入排序,时间复杂度为O(n)~O(n²) 2)冒泡排序,时间复杂度为O(...

  • LeetCode-排序算法

    LeetCode-排序算法 时间复杂度 排序算法平均时间复杂度冒泡排序O(n2)选择排序O(n2)插入排序O(n2...

  • rust写排序算法

    排序算法有内部排序、外部排序;其中内部排序有 复杂度为O(n^2)的算法,包括插入排序、冒泡排序; 复杂度为O(n...

  • 排序算法

    首先,任何时间复杂度为O(N)的排序算法做不到额外空间复杂度为O(1),因为这些排序算法不是基于比较的排序算法,所...

  • 冒泡排序 bubble sort

    冒泡排序 时间复杂度(平均、最坏) O(n^2),最好为O(n) 空间复杂度为O(n) 稳定性:稳定 算法解析: ...

  • 算法与数据结构之排序(Swift版)

    1、冒泡排序 时间复杂度为O(n²) 2、选择排序 时间复杂度为O(n²) 3、插入排序 时间复杂度为O(n²)

  • 排序三:桶排序、计数排序、基数排序

    这一篇我们来看三种时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序。我们把这类时间复杂度为O(n)的排序...

  • 快速排序与归并排序Java实现版

    快速排序 快速排序(Quicksort) 是一种排序算法,平均时间复杂度为:O(n log n),最坏需要 O(n...

网友评论

    本文标题:实现一个排序算法时间复杂度为O(n)

    本文链接:https://www.haomeiwen.com/subject/pvxrmxtx.html