快速排序虽然总体的平均效率是最好的,但也不是在任何时候都是最优的算法。比如数组本身已经是排好序了,而每一轮排序的时候都是以最后一个数字作为比较的标准,此时快速排序的效率只有 O(n2)O(n^2)。因此在这种场合快速排序就不是最优的选择。

考虑如下的场景,如何以时间效率 O(n)O(n) 实现对公司员工年龄的排序,公司共有几万名员工。

其实公司员工的年龄只在一个很小的区间内变化(range),又因为有那么多的员工存在,也即会有大量的员工年龄存在重复。由此我们可以建立一张表,维护年龄和出现次数的关系。

void SortAges(int ages[], int len)
{if (ages == NULL || len <= 0)return;const int oldest = 99;int cnt[oldest] = {0};for (int i = 0; i < len; ++i)++cnt[ages[i]];// 统计计数完毕int idx = 0;for (int i = 0; i < oldest; ++)for (int j = 0; j < cnt[i]; ++j)// i:表示年龄,且从小到大// cnt[i]:表示该年龄出现的次数// ∑cnt[i] = lenages[idx++] = i;// 不排序而排序
}

客户端调用:

#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;int randint(int s, int e)
{return rand() % (e - s) + s;
}int main(int, char**)
{const int N = 10000;int ages[N];for (int i = 0; i < N; ++i)ages[i] = randint(20, 100);SortAges(ages, N);copy(ages, ages + N, ostream_iterator<int>(cout, " "));cout << endl;return 0;
}

注:时间效率为 O(n)O(n) 一般意味着一次遍历,或稍微复杂的情况。

【剑指 offer】—— 为公司员工的年龄排序相关推荐

  1. 【LeetCode 剑指offer刷题】查找与排序题14:Wiggle Sort(系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Wiggle Sort II Given an unsorted array nums, reorder it su ...

  2. 【LeetCode 剑指offer刷题】查找与排序题12:Top K Frequent Elements

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Top K Frequent Elements Given a non-empty array of integer ...

  3. leetcode刷题笔记——剑指offer(二)[回溯、排序、位运算、数学、字符串]

    这里写目录标题 搜索与回溯 剑指 Offer 12. 矩阵中的路径 剑指 Offer 13. 机器人的运动范围 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树 ...

  4. 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)

    1. 题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2示例 2: 输入: nums = [5,7,7,8, ...

  5. 剑指offer面试题53 - I. 在排序数组中查找数字 I(二分查找)

    题目描述 统计一个数字在排序数组中出现的次数. 思路 详见链接 代码 class Solution:def search(self,nums:[int],target:int)->int:i, ...

  6. Leetcode刷题笔记——剑指offer II (六)【图】

    文章目录 图 695. 岛屿的最大面积 剑指 Offer II 106. 二分图 (每条边的两个结点都来自不同的集合) 剑指 Offer II 107. 矩阵中的距离 (最短路问题,建图,BFS) 剑 ...

  7. 《剑指 Offer》题目汇总

    文章目录 1. 数组 2. 链表 3. 栈和队列 4. 哈希表 5. 字符串 6. 树 7. 堆 8. 回溯和深度优先搜索 9. 递归和循环 10. 双指针 11. 动态规划 12. 贪心算法 13. ...

  8. 算法题解(剑指Offer篇)

    文章目录 栈与队列(简单) *剑指 Offer 09. 用两个栈实现队列 - 12.27 剑指 Offer 30. 包含min函数的栈 - 12.27 链表(简单) *剑指 Offer 06. 从尾到 ...

  9. 剑指Offer题目详解(CPP、JAVA)

    2019.10.11更新 最近开始学习c++,在本文中增加c++的解法,并更新一部分题目的解法. 前言(2018.6.1) 虽然已经度过了艰辛的找实习的日子,到了公司实习.但依然非常怀念那段准备面试. ...

最新文章

  1. 怎么快速了解自己的MySQL服务器?
  2. Tomcat container 内部容器
  3. iOS 国际化多语言设置 xcode7
  4. 苹果 iPhone/iPad 第三方键盘为何没语音听写功能?真相了
  5. CS231n-Numpy入门
  6. 从写组件说Xml——实现(五)
  7. Swagger2 忽略某些参数使其不出现在接口文档中
  8. 计算机组成与体系结构重点(四川大学软件学院)
  9. 程序员自学编程的6种方法,高效学习
  10. 推销计算机英语作文,2018年12月英语四级作文范文:卖电脑
  11. matlab使用矩形窗设计一个具有线性相位的低通数字滤波器,matlab结合矩形窗设计fir滤波器.doc...
  12. 关于iPad程序如何强制横屏
  13. 【Dvhop定位】基于加权双曲线定位的Dvhop算法附matlab代码
  14. 记录一下大三找实习的过程
  15. 安利 3 个 pandas 数据探索分析神器!
  16. 1.Hue 中运行oozie工作流执行spark 报错 local class incompatible
  17. 云+社区技术沙龙丨解析腾讯最新开源项目背后的技术栈
  18. wifi图标突然消失断网
  19. 修复gnome3下chrome鼠标主题不正确的问题
  20. 2019公众号引流小诀窍大汇总

热门文章

  1. SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式...
  2. hive中的lateral view的解析
  3. spark-sql配置并优化
  4. 数值方法与计算机算法试卷,《数值方法与计算机算法》课程教学大纲.pdf
  5. 考勤排班_考勤管理系统VS传统考勤排班优劣如何?
  6. linux+即时通讯服务器,linux平台上的即时通讯应用开发
  7. Win10+VS2015+CUDA9.0 环境搭建
  8. OpenCV配置及开发中遇到的问题
  9. mysql隔离级别与锁,接口并发响应速度的关系(2)
  10. Django signal