排序算法
给定数组arr[n],其中n=10000,0<arr[i]<9999,-1<i<10000.
已知数组中的值时乱序的,且其值均匀分布在0-9999 区间,只有少量数值重复
请用js代码写一个函数,以最快的方式完成对该数组的升序排序,要求算法时间复杂度必须小于O(NLOG2N).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
数据是均匀分布的,用桶排序挺合适,时间复杂度也必定小于NlogN。
对于N个待排数据,M个桶,桶排序平均时间复杂度为:O(N+N(logN/M)).
桶数越多,速度越快,但空间代价也越大。
具体算法就不写了。
//=======补充代码======
在firefox中测试,10000条数据,桶排序快一倍以上。
采用一个类似于位图的结构来解决这个问题。首先,你的数据量不大,而且像你说的重复数目也不多,这里看作常数。可以声明一个10000字节大小的数组count[10000],初始化为全0。扫描一遍你的待排序的数据,针对每一个值i,递增其对应的位置的数组值count[i]。扫描完毕后,再从头扫描一遍a[10000],对于i,输出a[i]次即可。这样时间复杂度为O(n),
我js不怎么懂。勉强给你写个函数
楼主请认真自己做作业,都说了复杂度小 NlogN 了,肯定不是排序了,而是某种比较讨巧的作法。
有人赞,我就写代码
数据很小,不要求空间复杂度的话直接桶排。