睡眠排序、面條排序、猴子排序


第一次聽着幾個的時候,感覺就是老哥你是來鬧的嗎

后來仔細看了一下  我靠  天才啊,好吧  其實也就是聽着挺好的  但是實際應用的話  還是挺多坑的 

 

一、睡眠排序

public class SleepSort {
    public static void main(String[] args) {
        int[] ints = {1,4,7,3,8,9,2,6,5};
        SortThread[] sortThreads = new SortThread[ints.length];
        for (int i = 0; i < sortThreads.length; i++) {
            sortThreads[i] = new SortThread(ints[i]);
        }
        for (int i = 0; i < sortThreads.length; i++) {
            sortThreads[i].start();
        }
    }
}
class SortThread extends Thread{
    int ms = 0;
    public SortThread(int ms){
        this.ms = ms;
    }
    public void run(){
        try {
            sleep(ms*10+10);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(ms);
    }
}

 

二、面條排序

首先去買一捆面,是意面掛面還是手擀面請按個人口味決定,最好是硬的。找到數組中最大和最小的兩個數(O(n)),讓最大的數對應一根很長的面條,最小的數對應一根很短的面條。重新遍歷數組,每遇到一個數,就取一根面條,把它切成這個數對應的長度,可以得到n根面條。這里的數與面條長度的對應可以用一個嚴格遞增的函數來映射。接下來,一手握住這n根面條,稍微用力,別握太緊,在平放的桌面上直立着放下,讓所有的面條底端接觸到桌面。另一只手平行於桌面,從面條上方緩慢往下移動,每當這只手碰到一根面條,移走它,並把對應的數輸出到結果數組中,直到移走全部面條。
用完的面條還可以煮夜宵哦。
面條排序的思想基本上跟睡眠排序一樣樣的,代碼不造咋寫...
 
 
三、猴子排序
 隨機打亂數組,檢查是否排好序,若是,則輸出,否則再次打亂,再檢查...最佳情況O(n),平均O(n*n!),最壞可執行直到世界的盡頭。
 
 
while(! isOrdered(nums))
    shuffle(nums);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM