睡眠排序大法
这是一个思想比较简单,脑洞巨大的算法 -- 我们知道sleep方法可以让一个线程睡眠x毫秒,如果需要对一个有n个数的数列进行排序,我们何不为每个数创建一个线程,然后让每个线程都睡眠该数的时间,那么对于越小的数,其睡眠时间越短,越大的数,其睡眠时间越长,最后就使得所有元素完成“排序”了
缺点:不能为负数,相邻的数字可能会有误差
public static void main(String[] args) {
int[] nums = new int[]{235, 233, 110, 789, 5, 0, 1};
for (int item : nums) {
new Thread(() -> {
try {
Thread.sleep(item);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(item);
}).start();
}
}
猴子排序大法
猴子排序引用了无限猴子定理:即一只猴子随机不停的敲击键盘,如果时间足够长,那么它总有可能会打出特定的文本,算法通过不停的随机排列数组,直到数组有序
public static void main(String[] args) {
int count = 0;
int[] arr = {7,5,3,1,9,20,8,13,-3,-20};
while(! isOrdered(arr)){
shuffle(arr);
count++;
}
System.out.println("排序次数"+count);
for(int i : arr){
System.out.print(i+" ");
}
}
//判断是否有序方法
public static boolean isOrdered(int[] arr) {
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] > arr[i]) {
return false;
}
}
return true;
}
//随机排序方法
public static void shuffle(int[] arr) {
int temp;
for (int i = 0; i < arr.length; i++) {
int j = (int)(Math.random() * arr.length);
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}