神奇排序--睡眠排序

 最近一段時間,微信羣被「老闆有毛病吧,寫完排序就讓我走」這個段子刷屏了微信

睡眠排序

  這個排序,其實很早以前就看到了,還記得初見此排序,驚爲天人,見慣了那些冒泡、快排,睡眠排序簡直是排序界一股清流啊!當時還準備在部門技術分享的時候,分享這個,可是,單單一個睡眠排序,沒法支撐一場分享,才做罷。多線程

  其實,我仍是很敬佩想出睡眠排序的那位人才的,由於通常狀況,想到排序,大多數人都跳不出比較排序分配排序的侷限,睡眠排序走出了新的道路。雖然缺點比較多spa

  1. 當出現一個很大的數字,會睡眠很長時間(效率低)線程

  2. 當數字相差很小,會不精準(不精準)排序

  3. 不能處理負數(雖然能夠在加上一個正數,再進行睡眠排序,可是得不償失)class

  4. 排序使用到了多線程,有點「殺雞焉用宰牛刀」的感受效率

    (缺點真的不少),可是,黑格爾曾經說過「存在即合理」,睡眠排序可能絕大部分場景不適用,但,存在一定有其意義的,也許之後會有個神奇需求正好配上這個神奇排序,哈哈。im

  說到睡眠排序,正好扒一扒它的同類。技術

猴子排序(Bogo sort)

  猴子排序,這個排序思路也很風騷,它的思想是:一組數字,隨機一次,若隨機後的結果不是有序的,再隨機一次。。。直到隨機的結果是有序的,理論上,只要時間足夠長,一定能排好序。就像一組無序的撲克牌,讓猴子打亂一次,若仍是無序的,猴子再打亂一次。sort

麪條排序(Spaghetti Sort)

  麪條排序呢,它的思想是:一組數字array,再來一把麪條,array裏的最大值對應麪條的高度,數字和麪條高度由此能夠獲得一個係數,這個係數就是數字數值和麪條高度的映射關係(好比,數字是 1到10,麪條是十根,每一根麪條都是高度10,那這個係數就是1),array裏的數字對應每一根麪條,再把多出的高度給折掉,最終就獲得長短不一的十根麪條,而後把十根麪條放桌子上端平,用手平行於桌面,從上往下,最早碰到手的,先拿開。這樣麪條排好序了,array也排好序了。

  上面三個神奇排序,前兩個還能夠用代碼寫寫,這第三個麪條排序,真的是代碼寫不出來了,特別是「麪條放桌子上端平」這個操做。。。

相關文章
相關標籤/搜索