日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】睡眠排序

發布時間:2025/3/15 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】睡眠排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫這個東西的緣由

這是一個羞恥度爆表的排序,那天跟朋友開玩笑,能不能用線程休眠操縱排序,朋友楞了一下,說還真有。。。我傻了,突然想想好像真有,就是這個睡眠排序。
最后長嘆一口氣,設計者腦洞真大。。。

這是個神馬玩意&&有何神奇之處

排序算法一般是力求兼顧時間和空間的平衡,而睡眠排序算法卻像是一個玩笑,當時間和空間兩者消耗足夠大,才能達到最終“精確”排序的目的。

原理/基本思想是什么

基于根據CPU的調度算法實現。
我們要對一組數據進行排序,不能存在負數值,這個數是多大,那么就在線程里睡眠它的10倍時間(ms)再加10,不是睡眠和它的數值一樣大的原因是,當數值太小時,誤差太大,睡眠的時間不比輸出的時間少,那么就會存在不正確的輸出結果。
(其實,我真的覺得容易出問題,因為你即使讓線程結束了休眠,也不見得能立刻被執行。。。不好說哇)

實現原理

構造 n 個(n為待排序元素個數)線程(自定義),它們和這 n 個數一一對應。
初始化后,線程都按照指定的時間開始休眠,等休眠時間到了以后結束休眠,等被執行的時候輸出它對應的數。
這樣,最小的數對應的線程最早醒來,這個數最早被輸出(理論上)。
等所有線程都結束休眠并被執行完成,排序就結束了。

實現代碼(Java)

線程類的構建

/*** 玄學的開始——構造線程子類*/ public class SortThread extends Thread { //待排序的數private int data = 0; public SortThread(int data){ this.data = data; } @Overridepublic void run(){ try { //睡眠指定的時間為數值的10倍再加上10sleep(data * 10 + 10);} catch (InterruptedException e) { e.printStackTrace(); } //輸出該數System.out.println(data); } }

下面是弱智般的實現算法(前提是會寫基本的多線程)。。。

public static int[] sort(int[] array) {//創建指定長度的線程數組SortThread[] threadList = new SortThread[array.length]; //指定線程數組中每個線程的值datafor (int i = 0; i < threadList.length; i++) { threadList[i] = new SortThread(arr[i]); } //開啟每個線程for (SortThread thread : threadList) { thread.start(); } }

吐槽

腦洞真大。。。。。。
時間復雜度是o(n),可是又怎樣……

總結

以上是生活随笔為你收集整理的【Java】睡眠排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。