原理就是......
从-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 1
这个叫低配版冒泡排序。
|
2
shawngao 2019-02-26 01:22:19 +08:00
是你赢了
|
3
xujinkai 2019-02-26 01:43:08 +08:00 via Android 3
你这不全面,万一超过范围呢。
应该先遍历一遍,得到上下界,然后再循环。 |
4
watzds 2019-02-26 01:43:12 +08:00 via Android
就是鸽巢排序,桶排序的时间换空间版
|
5
wbing 2019-02-26 06:10:54 +08:00 via iPhone 1
测试用例,{INT_MAX,INT_MIN}
|
6
Perry 2019-02-26 08:14:35 +08:00 via iPhone 3
有小数就凉
|
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 1
还是喜欢指鹿为马排序
|
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 位的内存 |