给定一个 int 数组,长度 200,里面的元素是 0-2000 内的随机数。找出 50-100 之间的所有数,并排序。大家有什么思路?

2015-07-09 16:36:41 +08:00
 marginleft
3467 次点击
所在节点    问与答
25 条回复
sumhat
2015-07-09 16:42:52 +08:00
先排个序再找 50 - 100 的就好了
loveuqian
2015-07-09 16:43:00 +08:00
初学者只能想到先遍历找出再排序了
batman2010
2015-07-09 16:46:17 +08:00
最大堆。
txx
2015-07-09 16:51:24 +08:00
2000 直接做基数排序吧....
chlx
2015-07-09 16:52:22 +08:00
如果不重复的话bit记录50-100. 最后按顺序输出. O(N).
publicID001
2015-07-09 16:57:21 +08:00
统计50-100 之间的所有数出现次数,输出

另外这种数据规模就算暴力也没什么压力啊
Kilerd
2015-07-09 16:58:36 +08:00
先sort,再用二分法找50和100,就可以了吧
otakustay
2015-07-09 17:15:12 +08:00
才200个数,显然开200个空位直接哈希排序了,冲撞就用开链表解决
akira
2015-07-09 17:46:07 +08:00
这个数据量,随便什么方法都可以了呀。
先排序在过滤或者先过滤再排序都毫无压力的。
而且排序直接冒泡都没问题呀
also24
2015-07-09 17:59:32 +08:00
我可以推荐一下Bogo排序嘛?
scream7
2015-07-09 18:17:47 +08:00
计数排序.
18000rpm
2015-07-09 18:58:50 +08:00
想到快排,并且在每次分区的过程中遇到 50~100 之外的直接丢掉。
leavic
2015-07-09 20:06:57 +08:00
@sumhat 运算量上讲,先查找再排序比较快吧。
acros
2015-07-09 20:43:59 +08:00
空间换时间吗?遍历一遍。

声明一个200长度的数组numArray[200],memset一下。
遍历一遍numArray[i]++,就得到所有数的排序表了
acros
2015-07-09 20:44:58 +08:00
上面数字说错了。等下我改改。
acros
2015-07-09 20:48:54 +08:00
numArray[2000];
原数组遍历src[i],
numArray[src[i]]++

然后查看下numArray从50到100项非零的。
hahastudio
2015-07-09 20:51:48 +08:00
桶排啊,反正就 51 个位置
cloud107202
2015-07-09 21:23:09 +08:00
桶排+1
IwfWcf
2015-07-09 22:42:36 +08:00
才 200 长度,怎么搞都可以啦……
liuhaotian
2015-07-09 22:44:40 +08:00
数组[50,100] x[M]++

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX