原理就是......
从-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);
}
}
}
}
![]() | 1 Building 2019-02-26 01:20:08 +08:00 via iPhone ![]() 这个叫低配版冒泡排序。 |
2 shawngao 2019-02-26 01:22:19 +08:00 是你赢了 |
![]() | 3 xujinkai 2019-02-26 01:43:08 +08:00 via Android ![]() 你这不全面,万一超过范围呢。 应该先遍历一遍,得到上下界,然后再循环。 |
![]() | 4 watzds 2019-02-26 01:43:12 +08:00 via Android 就是鸽巢排序,桶排序的时间换空间版 |
![]() | 5 wbing 2019-02-26 06:10:54 +08:00 via iPhone ![]() 测试用例,{INT_MAX,INT_MIN} |
![]() | 6 Perry 2019-02-26 08:14:35 +08:00 via iPhone ![]() 有小数就凉 |
![]() | 7 jzq526 2019-02-26 08:54:48 +08:00 大约循环 20 万次,还有比对,就为了给十几个数排序……貌似常见算法哪个都比这个效率高吧? 你这个算法在数据量很大,相对比较集中的情况下可能会好一点 |
![]() | 8 binxin 2019-02-26 08:58:21 +08:00 考虑一下位排序? 好像是直接申请一个 20 万位长的二进制数 |
![]() | 9 Orenoid 2019-02-26 08:59:45 +08:00 这不和桶排序差不多一个思路吗 |
11 liunian1004 2019-02-26 09:41:18 +08:00 via iPhone ![]() 还是喜欢指鹿为马排序 |
![]() | 13 admol 2019-02-26 09:57:40 +08:00 就这个写法来说, 两个 for 循环换一下顺序, 打印之后再退出下当前循环, 效率是不是要高一点 |
![]() | 14 codehz 2019-02-26 10:03:54 +08:00 via Android 说起来 gpu 上还真有这种操作( |
![]() | 15 luomu24 2019-02-26 10:19:17 +08:00 应该把范围改成 -2^31~(2^31)-1,这样就适用于全部了。嘿嘿 |
![]() | 16 smeraldo 2019-02-26 10:50:59 +08:00 小数怎么办? |
![]() | 17 lithiumii 2019-02-26 10:59:34 +08:00 还是斯大林排序好 |
18 mingleizhen 2019-02-26 11:04:05 +08:00 for 确实是很快。。。 |
![]() | 20 jmc891205 2019-02-26 11:23:26 +08:00 你可能对效率不错有什么误解 |
21 zzj0311 2019-02-26 14:00:50 +08:00 via Android 你是怎么发现它效率不错的。。 |
![]() | 22 luckyx 2019-02-26 14:30:23 +08:00 比冒泡差多了吧... 实用性还不广 |
![]() | 23 tabris17 2019-02-26 14:31:28 +08:00 out of bound |
![]() | 24 Kirscheis 2019-02-26 14:39:39 +08:00 via Android 你这样实现效率太低了,(max-min)*n 的时间。。不过可以用空间换时间变成基数排序,两次循环就可以 for i in nums { arr[(uint64) i] = 1; } for i in len(arr) { if arr[i] == 1 print((int64) i); } 时间是 n,不过最差可能需要 2^64 位的内存 |