java睡眠排序算法示例實(shí)現(xiàn)
無聊逛論壇,發(fā)現(xiàn)了這張圖

真是厲害啊,這排序, 既有多線程,又有排序,還有l(wèi)ambda表達(dá)式,但是這是C#版本,作為一個(gè)入坑的Java愛好者,當(dāng)然要去試試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) 搞不定負(fù)數(shù)。
(2)比如輸入數(shù)據(jù)很相近時(shí)會(huì)有誤差
(3)輸入數(shù)據(jù)很多時(shí),這些線程不能看作是同時(shí)啟動(dòng)等等...
對(duì)于(1),可以用一個(gè)在恒正的函數(shù)把輸入映射成時(shí)間;
(2),可以乘個(gè)系數(shù),放大數(shù)據(jù)間的差,但是依然搞不定重復(fù)的數(shù)據(jù);
(3),試著讓算法在多個(gè)物理核上真正的并行起來
運(yùn)行結(jié)果

這是一種很神經(jīng)的算法,沒有十年腦血栓想不出來
原理就是開很多線程,線程數(shù)量等于你要排序的元素?cái)?shù)量,讓他們按照原數(shù)組順序輸出,過程中讓線程睡眠,睡的時(shí)長跟元素自身大小對(duì)應(yīng),所以越大睡的越久
以上就是java睡眠排序算法示例實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于java睡眠排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Windows系統(tǒng)下JDK1.8與JDK11版本切換超詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下JDK1.8與JDK11版本切換的超詳細(xì)教程,我們可以有多個(gè)工程項(xiàng)目,用的JDK版本不一樣,這個(gè)時(shí)候就需要進(jìn)行自由切換JDK版本了,需要的朋友可以參考下2023-07-07
Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題
這篇文章主要介紹了Spring事務(wù)失效的一種原因關(guān)于this調(diào)用的問題,本文給大家分享問題原因及解決辦法,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
詳細(xì)解讀Druid數(shù)據(jù)庫連接池的使用
這篇文章主要介紹了Druid數(shù)據(jù)庫連接池的使用,數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個(gè),需要的朋友可以參考下2023-03-03
java實(shí)現(xiàn)網(wǎng)站微信掃碼支付
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)網(wǎng)站微信掃碼支付,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07

