最近微博上的一个被大家称之为“睡眠算法”的排序方式,让人感到非常好奇。仔细一看才发现,写代码的人也是人才呀。
虽然说这种写代码的方式不能应用到实际开发中,但是身为程序员可以探索一下:
两个弊端:
1. 针对数字相差较小的,该算法不能正确输出,比如(3,1),依然会输出3,1
2. 针对数字较大的,时间有点长(蛮符合睡眠算法的基本思想)
为了可以正确的按照升序输出(不考虑时间,只考虑输出结果):
public class SleepSort implements Runnable {
int number;
public static int length = 0;
public SleepSort(int number) {
this.number = number;
}
public static void main(String[] args) {
int numbers[] = {3, 3434, 3435, 3436, 1236, 1, 5555, 1235, 3, 3434, 3435, 3436,
1236, 1, 5555, 1235};
length = numbers.length;
for (int i = 0; i < length ; i++) {
// 增加睡眠的间隔时间,防止因为时间过短导致的睡眠不足问题(针对间隔较小的数字排序)
new Thread(new SleepSort(numbers[i]*length)).start();
}
}
public void run() {
try {
Thread.sleep(number);
System.out.println(number/length);
} catch (Exception e) {
}
}
}
输出结果:
1
1
3
3
1235
1235
1236
1236
3434
3434
3435
3435
3436
3436
5555
5555
Process finished with exit code 0
仅供娱乐!莫要当真!