一堆亂七八糟絕不正經的排序算法
原文
索引
-
猴子排序
-
鉆石排序(戴蒙德排序)
-
惡魔排序
-
珠排序
-
地精排序(慫貨排序)
-
智能設計排序
1. 猴子排序
(提供者cy1306110516)
猴子排序的思想源自於著名的無限猴子定理。
既然猴子們能敲出《哈姆雷特》,區區排序又算什麽呢?
思路:
-
判斷數組是否有序,如果無序,進入下一步。
-
隨機打亂數組,回到上一步。
適用人群:
歐皇
時間復雜度:
-
最壞情況O(∞)
-
最好情況O(n)
算法實現:
1 #include <bits/stdc++.h> 2using namespace std; 3 int n,a[100005]; 4 inline void random_(){ 5 for (int i=1;i<=n;i++) swap(a[i],a[i+rand()%(n-i+1)]); 6 //打亂,AC全靠RP 7 } 8 inline bool check(){ 9 for (int i=2;i<=n;i++) if (a[i]<a[i-1]) return false; 10 return true; 11 //判斷是否有序 12 } 13 inline voidbogo_sort(){ 14 while (!check()) 15 random_(); 16 //核心代碼 17 } 18 int main(){ 19 scanf("%d",&n); 20 srand(time(NULL)); 21 for (int i=1;i<=n;i++) scanf("%d",&a[i]); 22 bogo_sort(); 23 for (int i=1;i<=n;i++) printf("%d ",a[i]); 24 return 0; 25 }//提供者cy1306110516
2. 鉆石排序
(提供者DARTH_VADER)
鉆石排序(又名戴蒙德排序)的思想源自於演化生物學家賈雷德·戴蒙德的作品《槍炮、病菌與鋼鐵》。
思路:
-
對於數組中的每一項,創造一個等同人數的人類部落。
-
讓他們獨立地發展。
-
第一個發展出槍支的最大,以此類推。
適用人群:
極遠未來的統治階層
時間復雜度:
O(n),常數為13000年。
代碼實現:
暫無
3.惡魔排序
(提供者DARTH_VADER)
惡魔排序的思想源自於十九世紀英國物理學家詹姆斯·克拉克·麥克斯韋的麥克斯韋惡魔假說。
思路:
創造這樣的一種氣體:其每一個分子運動速度與數組中的每一個數成比例。
將這樣的氣體灌入一個密封的盒子,該盒子被一分為二,中間有一個小孔接通兩側。
小孔一次只能經過一個分子。
每一次迅速打開小孔,讓特定分子經過。
那麽長時間後,盒子將一側熱一側冷。
對於每一側,分治進行本算法。
適用人群:
麥克斯韋的惡魔
時間復雜的:
O(n!)
代碼實現:
暫無
4. 珠排序
(提供者502_Bad_Gateaway)
珠排序的思想源自於中國歷史悠久的算盤。(大霧)
思路:
-
對於每一個數字,我們用一排珠子表示。
-
將這些珠子疊在一起,使其自然下落。
-
每一層的珠子數量即為該位置數值。
適用人群:
喜好珠算的OIer
時間復雜度:
這個。。。呃呃呃看你怎麽說了
代碼實現:
等一下哈,本人正在敲
5. 慫貨地精排序
(提供者502_Bad_Gateaway)
慫貨排序。。。很慫。
思路:
-
當i=0或a[i]>a[i-1]時,i++。
-
否則交換a[i]與a[i-1],i--。
適用人群:
正常人類
時間復雜度:
O( n^2n2 )
代碼實現:
1 void gnome_sort(int unsorted[]){ 2 int i = 0; 3 while (i < unsorted.Length){ 4 if (i == 0 || unsorted[i - 1] <= unsorted[i])i++; 5 else{ 6 int tmp = unsorted[i]; 7 unsorted[i] = unsorted[i - 1]; 8 unsorted[i - 1] = tmp; 9 i--; 10 } 11 } 12 }//提供者DARTH_VADER
6. 智能設計排序
(提供者DARTH_VADER)
智能設計排序的思想源自於智能設計論(智設論)。
思路:
假設我們有一些數字(它們組成了給出的數組),那麽它們恰好排序成給出的數組的概率是 \frac{1}{n!}n!1?。
面對如此小的可能性,我們斷言這樣的數組是隨機出現的,未免太過果斷。
有理由相信,這樣的一個數組是一個有自我意誌的排序者給出的。
由於我們對排序的認知被局限在遞增或遞減,揣摩排序者用意的行為是不理智的。
因此大可放心:數組已被排序!
適用人群:
懶人
時間復雜度:
O(0),當然算上輸入就是O(n)
代碼實現:
1 #define donothing return 2 void intelligentDesignSort(int list[]){ 3 donothing; 4 }//提供者DARTH_VADER 5
一堆亂七八糟絕不正經的排序算法