博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
O(N)时间的排序
阅读量:6094 次
发布时间:2019-06-20

本文共 940 字,大约阅读时间需要 3 分钟。

题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。

  要注意分析题目,一般排序要么是O(n^2),要么是O(nlogn)。但这里题目特别强调是对一个公司的员工的年龄作排序。员工的数目虽然有几万人,但这几万员工的年龄却只有几十种可能。上班早的人一般也要等到将近二十岁才上班,一般人再晚到了六七十岁也不得不退休。

  由于年龄总共只有几十种可能,我们可以很方便地统计出每一个年龄里有多少名员工。举个简单的例子,假设总共有5个员工,他们的年龄分别是2524262425。我们统计出他们的年龄,24岁的有两个,25岁的也有两个,26岁的一个。那么我们根据年龄排序的结果就是:2424252526,即在表示年龄的数组里写出两个24、两个25和一个26

代码如下:

 

1 void sortAge(int ages[],int length) 2 { 3     //  要学会考虑全面 4     if(ages==NULL || length<=0) 5         return ; 6     const int oldAge = 99; 7     int age[oldAge+1]; 8  9     //  尽量多用++i的形式10     for(int i=0;i<=length;++i)11     {12         int ageIn = ages[i];13         ++age[ageIn];14     }15     int index =0;16     for(int i=0;i<=oldAge;++i)17     {18         for(int j=0;j

 

要辅助空间为O(1)的意思不是说用大小为1的空间,而是说辅助的空间是常量,不随着输入N变大而变大由于不管对多少人的年龄作排序,辅助数组的长度是固定的100个整数,因此它的空间复杂度是个常数,即O(1)

原文请参考http://zhedahht.blog.163.com/。

 

转载于:https://www.cnblogs.com/balingybj/p/4508824.html

你可能感兴趣的文章
设计模式总结
查看>>
java游戏服务器 建造者模式
查看>>
Python sys.argv[] 的用法
查看>>
react
查看>>
【知识点】同样是消息队列,Kafka凭什么速度那么快?
查看>>
SDNU 1049.盒饭(水题)
查看>>
POJ 2418 简单trie树
查看>>
POJ 1703 带权并查集
查看>>
uboot
查看>>
QEMU修改及安装包编译
查看>>
activemq 安装-单点
查看>>
Mac OS finder : 显示和隐藏文件[夹] show and hide files or folders
查看>>
Oracle附录——Oracle事务
查看>>
英语单词01
查看>>
js 轮播效果
查看>>
XSS攻击与防范
查看>>
WCF 第二章 契约 在一个服务中实现多个契约和终结点
查看>>
我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)
查看>>
PDF补丁丁0.3.3版:字符识别结果写入PDF文件功能邀请测试
查看>>
windows连接服务端的域名正常,linux却不通,(针对于负载均衡后端节点设置)...
查看>>