睡眠排序
何谓睡眠排序?在网上看到了一种排序操作:睡眠排序,感觉有点迷哈哈。。。
通过线程的休息时长进行排序操作。
import java.util.*;
public class Sort {
public static ArrayList<Integer> sorted = new ArrayList<>();
public static void main(String[] args) {
int[] arr = {3,44,38,5,47,15,36,26,2,46,4,19,50,48};
System.out.println("排序前:"+Arrays.toString(arr));
//创建线程
SortThread[] threads = new SortThread[arr.length];
for (int i= 0; i<threads.length;i++){
threads[i] = new SortThread(arr[i], i);
}
//开启每个线程
for (int i= 0; i<threads.length;i++){
threads[i].start();
}
while (true){
if (Sort.sorted.size() == arr.length){
System.out.println("排序后:" + Sort.sorted.toString());
break;
}else {
try {
Thread.sleep(500);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
public static class SortThread extends Thread{
int number = 0;
int index = 0;
public SortThread(int number, int index){
this.number = number;
this.index = index;
}
@Override
public void run() {
try {
//睡眠指定时间
sleep(this.number*10);
}catch (InterruptedException e){
e.printStackTrace();
}
Sort.sorted.add(this.number);
System.out.println("第"+ (this.index+1)+"人醒了,\t他分配的数字是:[" + this.number+"]");
}
}
}
结果:虽然感觉这种排序有点鸡肋,但也是能提供一种线程编程想法。