如果有人問(wèn)你哪種排序算法是你最喜歡的,可能你會(huì)偏愛(ài)簡(jiǎn)單的冒泡排序,也有可能會(huì)選擇具備分治思想的快速排序或者歸并排序。
但如果有人問(wèn)你你所見(jiàn)過(guò)哪些奇葩的算法時(shí),你的回答會(huì)是什么?
下面,我就將網(wǎng)上腦洞大開(kāi)的一些奇葩算法畫(huà)出來(lái),以饗讀者。
睡眠排序
根據(jù)CPU的調(diào)度算法實(shí)現(xiàn)的,對(duì)一組數(shù)據(jù)進(jìn)行排序,不能存在負(fù)數(shù)值,這個(gè)數(shù)是多大,那么就在線程里睡眠它的10倍再加10,不是睡眠和它的數(shù)值一樣大的原因是,當(dāng)數(shù)值太小時(shí),誤差太大,睡眠的時(shí)間不比輸出的時(shí)間少,那么就會(huì)存在不正確的輸出結(jié)果。
猴子排序
隨機(jī)打亂數(shù)組,檢查是否排好序,若是,則輸出,否則再次打亂,再檢查…最佳情況O(n),平均O(n*n!),最壞可執(zhí)行直到世界的盡頭。
一個(gè)有趣的理論:一只猴子隨機(jī)敲打打字機(jī)鍵盤(pán),如果時(shí)間足夠長(zhǎng),總是能打出特定的文本,比如莎士比亞全集。^_^
面條排序
首先去買(mǎi)一捆面條,我喜歡手搟面。找到數(shù)組中最大和最小的兩個(gè)數(shù)(O(n)),讓最大的數(shù)對(duì)應(yīng)一根很長(zhǎng)的面條,最小的數(shù)對(duì)應(yīng)一根很短的面條。重新遍歷數(shù)組,每遇到一個(gè)數(shù),就取一根面條,把它切成這個(gè)數(shù)對(duì)應(yīng)的長(zhǎng)度,可以得到n根面條。這里的數(shù)與面條長(zhǎng)度的對(duì)應(yīng)可以用一個(gè)嚴(yán)格遞增的函數(shù)來(lái)映射。接下來(lái),一手握住這n根面條,稍微用力,別握太緊,在平放的桌面上直立著放下,讓所有的面條底端接觸到桌面。另一只手平行于桌面,從面條上方緩慢往下移動(dòng),每當(dāng)這只手碰到一根面條,移走它,并把對(duì)應(yīng)的數(shù)輸出到結(jié)果數(shù)組中,直到移走全部面條。
你們還見(jiàn)過(guò)哪些奇葩的排序算法,留言說(shuō)說(shuō)唄~
-
cpu
+關(guān)注
關(guān)注
68文章
11287瀏覽量
225188 -
算法
+關(guān)注
關(guān)注
23文章
4785瀏覽量
98114
原文標(biāo)題:這些奇葩的排序算法,你沒(méi)見(jiàn)過(guò)動(dòng)畫(huà)吧?
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
這些年,你沒(méi)見(jiàn)過(guò)的電子元器件
你沒(méi)見(jiàn)過(guò)的u***接口充電電池
你有見(jiàn)過(guò)這些單片機(jī)工具嘛?沒(méi)有就保存下來(lái)吧
奇葩找奇葩
STM32的FSMC初始化LCD的奇葩問(wèn)題
年輕人必備的十大“奇葩”電子裝備
無(wú)人機(jī)秒變運(yùn)鈔機(jī),土豪公司發(fā)年終獎(jiǎng)太奇葩?。ǜ胶芑鸬囊曨l)
奇葩的問(wèn)題,簇的邊框不見(jiàn)了。
這樣的手機(jī)無(wú)線充電器你見(jiàn)過(guò)不?
日常生活中你有見(jiàn)過(guò)哪些物聯(lián)網(wǎng)應(yīng)用
會(huì)發(fā)光的鈔票,你見(jiàn)過(guò)嗎?
你沒(méi)見(jiàn)過(guò)的后視鏡新調(diào)法
LED顯示屏的奇葩應(yīng)用:最后一個(gè)你敢嘗試嗎?
奇葩燈具 美麗超越你的想象
這樣的趣味電路圖,你見(jiàn)過(guò)嗎
你所見(jiàn)過(guò)哪些奇葩的算法有哪些?
評(píng)論