1. 程式人生 > >一堆亂七八糟絕不正經的排序算法

一堆亂七八糟絕不正經的排序算法

bottom true 如果 比例 n) 中國歷史 http 最大 自我

原文

索引

  1. 猴子排序

  2. 鉆石排序(戴蒙德排序)

  3. 惡魔排序

  4. 珠排序

  5. 地精排序(慫貨排序)

  6. 智能設計排序


1. 猴子排序

(提供者cy1306110516)

猴子排序的思想源自於著名的無限猴子定理。

既然猴子們能敲出《哈姆雷特》,區區排序又算什麽呢?

思路:

  1. 判斷數組是否有序,如果無序,進入下一步。

  2. 隨機打亂數組,回到上一步。

適用人群:

歐皇

時間復雜度:

  • 最壞情況O(∞)

  • 最好情況O(n)

算法實現:

 1 #include <bits/stdc++.h>
 2
using 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 void
bogo_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)

鉆石排序(又名戴蒙德排序)的思想源自於演化生物學家賈雷德·戴蒙德的作品《槍炮、病菌與鋼鐵》。

思路:

  1. 對於數組中的每一項,創造一個等同人數的人類部落。

  2. 讓他們獨立地發展。

  3. 第一個發展出槍支的最大,以此類推。

適用人群:

極遠未來的統治階層

時間復雜度:

O(n),常數為13000年。

代碼實現:

暫無


3.惡魔排序

(提供者DARTH_VADER)

惡魔排序的思想源自於十九世紀英國物理學家詹姆斯·克拉克·麥克斯韋的麥克斯韋惡魔假說。

思路:

創造這樣的一種氣體:其每一個分子運動速度與數組中的每一個數成比例。

將這樣的氣體灌入一個密封的盒子,該盒子被一分為二,中間有一個小孔接通兩側。

小孔一次只能經過一個分子。

每一次迅速打開小孔,讓特定分子經過。

那麽長時間後,盒子將一側熱一側冷。

對於每一側,分治進行本算法。

適用人群:

麥克斯韋的惡魔

時間復雜的:

O(n!)

代碼實現:

暫無


4. 珠排序

(提供者502_Bad_Gateaway)

珠排序的思想源自於中國歷史悠久的算盤。(大霧)

思路:

  1. 對於每一個數字,我們用一排珠子表示。

  2. 將這些珠子疊在一起,使其自然下落。

  3. 每一層的珠子數量即為該位置數值。

技術分享圖片

適用人群:

喜好珠算的OIer

時間復雜度:

這個。。。呃呃呃看你怎麽說了

代碼實現:

等一下哈,本人正在敲


5. 慫貨地精排序

(提供者502_Bad_Gateaway)

慫貨排序。。。很慫。

思路:

  1. 當i=0或a[i]>a[i-1]時,i++。

  2. 否則交換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  

一堆亂七八糟絕不正經的排序算法