Java睡眠排序大法

無聊逛論壇,發現了這張圖

真是厲害啊,這排序, 既有多線程,又有排序,還有lambda表達式,但是這是C#版本,作爲一個入坑的Java愛好者,當然要去試試Java版本了,廢話不多說,上代碼

/**
 * @author Marblog
 */
public class Main {
    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();
        }

    }
}

運行結果

 果然可以

 

代碼很粗略,很多bug。比如

(1) 搞不定負數。

(2)比如輸入數據很相近時會有誤差

(3)輸入數據很多時,這些線程不能看作是同時啓動等等...

對於(1),可以用一個在恆正的函數把輸入映射成時間;

(2),可以乘個係數,放大數據間的差,但是依然搞不定重複的數據;

(3),試着讓算法在多個物理核上真正的並行起來

 

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