在算法的世界裡,有許多高效率的排序算法,比如快速排序、歸併排序、桶排序......它們
大大提高了程序的性能。但是,也有一些比較奇葩的排序算法,它們既不能做到高效率,也沒有很好的可讀性。那它們存在的意義是什麼呢?因為有趣呀。
下面,讓我們來介紹三種“異想天開”的排序算法。
1.睡眠排序
————— 第二天 —————
<code>public static void sleepSort(int[] array){/<code>
<code>for (int num : array) {/<code>
<code>new Thread( -> {/<code>
<code>try {/<code>
<code>Thread.sleep(num);/<code>
<code>} catch (InterruptedException e) {/<code>
<code>e.printStackTrace;/<code>
<code>}/<code>
<code>System.out.println(num);/<code>
<code>}).start;/<code>
<code>}/<code>
<code>}/<code>
<code>public static void main(String[] args) {/<code>
<code>int array = {10,30,50,60,100,40,150,200,70};/<code>
<code>sleepSort(array);/<code>
<code>}/<code>
<code>}/<code>
————————————
(小灰把自己的代碼給大黃展示了)
2.猴子排序
或許這樣說比較抽象,讓我們來演示一下:
3.珠排序
見過算盤的人都知道,算盤上有許多圓圓的珠子被串在細杆上,就像下面這樣:
如果把算盤豎起來,會發生什麼呢?算盤上的小珠子會在重力的作用下滑到算盤底部,就像下面這樣:
什麼意思呢?我們來仔細說明一下:
在珠子下落之前,每一橫排有幾個珠子?如上圖所示,每排珠子的數量分別是3, 2, 4, 5, 1,這個數列是無序的。
當珠子下落以後,每一橫排有又幾個珠子?如上圖所示,每排珠子的數量變成了1, 2, 3, 4, 5,這個數列是有序的!
那麼,我們可不可以模擬珠子下落的原理,對一組正整數進行排序呢?答案是可以的。
我們可以用二維數組來模擬算盤,有珠子的位置設為1,沒有珠子的位置設為0。那麼,一個無序的整型數組就可以轉化成下面的二維數組:
接下來,我們模擬算盤珠子掉落的過程,讓所有的元素1都落到二維數組的最底部:
最後,把掉落後的 “算盤” 轉化成一維有序數組:
—————END—————
閱讀更多 程序亦非猿 的文章