SleepSort演算法——Java實現

來源:互聯網
上載者:User

最近在網上看到一則SleepSort演算法(用Shell指令碼寫的):代碼如下:

----------------------------------------------------------------------------

 

#!/bin/bashfunction f() {    sleep "$1"    echo "$1"}while [ -n "$1" ]do    f "$1" &    shiftdonewait-----------------------------------------------------------------------------


用法如下:

./sleepsort.bash 1 4 7 3 8 9 2 6 5


分析:核心思想是:根據資料讀入的資料大小確定休眠時間,從而可以根據資料大小正確排序了。

負數或浮點數就有bug。

有網友根據此演算法改進:

負數的解決方案是,我們可以這樣來:x/2+MaxInt/2(時間可能相當長,不過依然工作)。對於浮點數,看看下面的代碼.

 

 

 

----------------------------------------------------------------------------


#!/bin/bash function f() {    sleep $( echo "($2 - 1) + $1 / 10 ^ $2" | bc -l)    echo "$1" } while [ -n "$1" ] do    f "$1" $( echo -n "$1" | wc -c) &    shift done wait----------------------------------------------------------------------------更有勝者實現了Javascript的版本:---------------------------------------------------------------------------

function sleepsort() {      for ( var i = 0, il = arguments.length; i < il; i++) {          ( function (args, index) {              setTimeout( function () {                  document.body.innerHTML += args[index] + ', ' ;              }, args[index]);          }(arguments, i));      } };-----------------------------------------------------------------------------

據此核心思想,實現Java版本的實現方式:-------------------------------------------------------------------------------------------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.print(ms+" ");    }}-------------------------------------------------------------------------------------------

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.