1. 程式人生 > >這些奇葩的排序演算法,你沒見過動畫吧?

這些奇葩的排序演算法,你沒見過動畫吧?

如果有人問你哪種排序演算法是你最喜歡的,可能你會偏愛簡單的氣泡排序,也有可能會選擇具備分治思想的快速排序或者歸併排序。

但如果有人問你你所見過哪些奇葩的演算法時,你的回答會是什麼?

下面,我就將網上腦洞大開的一些奇葩演算法畫出來,以饗讀者。

睡眠排序

根據CPU的排程演算法實現的,對一組資料進行排序,不能存在負數值,這個數是多大,那麼就線上程裡睡眠它的10倍再加10,不是睡眠和它的數值一樣大的原因是,當數值太小時,誤差太大,睡眠的時間不比輸出的時間少,那麼就會存在不正確的輸出結果。

imageimage

猴子排序

隨機打亂陣列,檢查是否排好序,若是,則輸出,否則再次打亂,再檢查…最佳情況O(n),平均O(n*n!),最壞可執行直到世界的盡頭。

imageimage

一個有趣的理論:一隻猴子隨機敲打打字機鍵盤,如果時間足夠長,總是能打出特定的文字,比如莎士比亞全集。^_^

麵條排序

首先去買一捆麵條,我喜歡手擀麵。找到陣列中最大和最小的兩個數(O(n)),讓最大的數對應一根很長的麵條,最小的數對應一根很短的麵條。
重新遍歷陣列,每遇到一個數,就取一根麵條,把它切成這個數對應的長度,可以得到n根麵條。
這裡的數與麵條長度的對應可以用一個嚴格遞增的函式來對映。
接下來,一手握住這n根麵條,稍微用力,別握太緊,在平放的桌面上直立著放下,讓所有的麵條底端接觸到桌面。另一隻手平行於桌面,從麵條上方緩慢往下移動,每當這隻手碰到一根麵條,移走它,並把對應的數輸出到結果陣列中,直到移走全部麵條。

imageimage

你們還見過哪些奇葩的排序演算法,來公眾號 五分鐘學演算法 留言說說吧~