继"睡眠排序"后, 我突发奇想写了个改良版的......

2019-02-26 01:07:54 +08:00
 Adlered

原理就是......
从-99999 循环到 99999
然后每循环一次, 在每次循环其中再遍历一次数组, 如果数组里含有这个数, 就打印出来......
我是不是该吃药了? 效率还莫名的不错......
不但支持负数, 还能自由修改排序范围......

public class 智障排序 {
  public static void main(String[] args) {
   int[] nums = {1,4,2,5,3,9,123412,12,5112,126,-12};
    for (int i = -99999; i < 99999; i++) {
     for (int j:nums) {
     if (j == i)
      System.out.println(i);
    }
   }
  }
}

4982 次点击
所在节点    程序员
26 条回复
Building
2019-02-26 01:20:08 +08:00
这个叫低配版冒泡排序。
shawngao
2019-02-26 01:22:19 +08:00
是你赢了
xujinkai
2019-02-26 01:43:08 +08:00
你这不全面,万一超过范围呢。
应该先遍历一遍,得到上下界,然后再循环。
watzds
2019-02-26 01:43:12 +08:00
就是鸽巢排序,桶排序的时间换空间版
wbing
2019-02-26 06:10:54 +08:00
测试用例,{INT_MAX,INT_MIN}
Perry
2019-02-26 08:14:35 +08:00
有小数就凉
jzq526
2019-02-26 08:54:48 +08:00
大约循环 20 万次,还有比对,就为了给十几个数排序……貌似常见算法哪个都比这个效率高吧?
你这个算法在数据量很大,相对比较集中的情况下可能会好一点
binxin
2019-02-26 08:58:21 +08:00
考虑一下位排序?
好像是直接申请一个 20 万位长的二进制数
Orenoid
2019-02-26 08:59:45 +08:00
这不和桶排序差不多一个思路吗
yosemite
2019-02-26 09:07:16 +08:00
@jzq526 这本来就是脑洞用的。要不睡眠排序不是更扯
liunian1004
2019-02-26 09:41:18 +08:00
还是喜欢指鹿为马排序
fcten
2019-02-26 09:57:07 +08:00
@jzq526 是 11*20 万次吧
admol
2019-02-26 09:57:40 +08:00
就这个写法来说, 两个 for 循环换一下顺序, 打印之后再退出下当前循环, 效率是不是要高一点
codehz
2019-02-26 10:03:54 +08:00
说起来 gpu 上还真有这种操作(
luomu24
2019-02-26 10:19:17 +08:00
应该把范围改成 -2^31~(2^31)-1,这样就适用于全部了。嘿嘿
smeraldo
2019-02-26 10:50:59 +08:00
小数怎么办?
lithiumii
2019-02-26 10:59:34 +08:00
还是斯大林排序好
mingleizhen
2019-02-26 11:04:05 +08:00
for 确实是很快。。。
pkokp8
2019-02-26 11:06:09 +08:00
@Perry 乘所有数的分母乘积
jmc891205
2019-02-26 11:23:26 +08:00
你可能对效率不错有什么误解

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

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

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

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

© 2021 V2EX