睡眠排序–go實現

來源:互聯網
上載者:User

            一次偶然的機會看見了睡眠排序,很有意思的一種排序演算法,可以說是對我們熟悉的正規排序的一種挑戰,是思想上的突破,有點像腦筋急轉彎。使用睡眠排序演算法,只能按照從小到大的順序排列。列印數組中的資料時,按照其大小sleep,這樣,數越大sleep的時間也就越長。所有的數同時進入sleep狀態,數比較小的會提前列印出來。近期使用的都是GO語言,對其並發也有了些許理解,所以,使用go語言來實現這種排序,是很不錯的選擇。

// test project main.gopackage mainimport ("fmt""time")var flag boolvar container chan boolvar count int func main() {flag = truecontainer = make(chan bool, 7)var arrays []int = []int{25, 12, 36, 24, 96, 54, 28}var i intfor i = 0; i < len(arrays); i++ {go tosleep(arrays[i])}go listen(len(arrays))for flag {time.Sleep(1e9)}}func listen(size int) {for flag {select {case <-container:count++if count >= size {flag = falsebreak}}}}func tosleep(data int) {time.Sleep(time.Duration(data))fmt.Println(data)container <- true}

本來以為三兩下就能寫完,結果卻用了將近半個小時,難倒我的地方在於怎樣有效將程式停止。用了一個container channel來儲存某些資料已經列印結束了,當container中資料有數組那麼多時,說明資料已經全部列印完畢,程式可以退出了。期間犯了個小錯誤,沒有指定channel的capacity,導致阻塞。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.