天才算法-睡眠排序

它的基本思想是:主要是根據CPU的調度算法實現的,對一組數據進行排序,不能存在負數值,這個數是多大,那麼就在線程裏睡眠它的10倍再加10,不是睡眠和它的數值一樣大的原因是,當數值太小時,誤差太大,睡眠的時間不比輸出的時間少,那麼就會存在不正確的輸出結果。

public class SleepSort {  
	
    public static void main(String[] args) {  
    	
        int[] arr = {1,4,7,3,8,9,2,6,5};
        //創建指定長度的線程數組
        SortThread[] sortThreads = new SortThread[arr.length];  
        //指定每個線程數組的值
        for (int i = 0; i < sortThreads.length; i++) {  
            sortThreads[i] = new SortThread(arr[i]);  
        } 
        //開啓每個線程
        for (int i = 0; i < sortThreads.length; i++) {  
            sortThreads[i].start();  
        }  
    }  
}  
class SortThread extends Thread{  
    int s = 0;  
    public SortThread(int s){  
        this.s = s;  
    }  
    public void run(){  
        try {  
            sleep(s*10+10);  //睡眠指定的時間
        } catch (InterruptedException e) {  
              
            e.printStackTrace();  
        }  
        //輸出該數
        System.out.println(s);  
    }  
}  

缺陷:

  1. 當出現一個很大的數字,會睡眠很長時間(效率低)

  2. 當數字相差很小,會不精準(不精準)

  3. 不能處理負數(雖然可以在加上一個正數,再進行睡眠排序,但是得不償失)

  4. 排序使用到了多線程,有點“殺雞焉用宰牛刀”的感覺

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章