最近想看看排序演算法,按字母發音排序,我首先看到的是bogo排序,bogo排序作者本身不認為是好的排序演算法,這是一種靠偶然性排序的演算法,但是作為排序演算法的一種,還是大體介紹下。
對於bogo排序,很容易讓我們想起乙個場景,就是我們手中拿著一疊撲克牌,向上丟擲,落在地上,我們期待落在地上的時候這些撲克牌是有序的,a-k(我試過沒有一次成功,也許是人品問題吧),如果沒有沒排序好則繼續拋,其實bogo排序演算法也是基於這種思想衍生出來的。
對於「向上拋」的過程中,我想不到更好的方法,想來想去還是借助隨機數吧,random類,我想大家都非常熟悉,
和方法名一樣,這個方法我暫且稱之為洗牌,**很簡單,通過此方法可看出,整個洗牌(也就是實際上的排序過程)是建立在隨機數的基礎上,顯然我不太相信這種隨機事件能夠發聲在我的身上。我們可以看出這種排序演算法的最長時間將是真無窮,我們不希望等待給幾個數字排序到頭髮花白吧。作為了解,此種排序不宜在實際中應用。
通過這個排序演算法,我們可以想象現實生活中有些時候需要我們去打亂一些順序,舉個例子,我們的客戶流水都是按時間點先後有序存到資料庫裡面的,我們需要在某天發放獎品,獎品得主應該是充分具備隨機性,這時候我們需要無序,這時候,我們向來想去,用什麼來打亂這種時間順序好呢,不如用bogo排序演算法吧,我想這個方法來一次,順序肯定被打的亂七八糟了,當然這只是筆者的一種刻意想象,學習計算機樂趣就在其中。
由hashCode 引發的一系列知識延伸
public native int hashcode hashcode 作為object類的乙個方法,返回物件的hashcode值 這個值與jvm相關,通常是物件相關資訊對映成的乙個數值。hashcode 一般用於雜湊容器,比如hashmap。hashmap的put方法原始碼如下 public v ...
歸併和快速排序思想的延伸
前面學習了歸併和快速排序演算法,現在來了解歸併和快速排序演算法背後的演算法思想 分治思想,並對歸併和快速排序進行擴充套件,解決經典演算法問題 逆序對和第k大的演算法問題 顧名思義,分而治之,就是將原問題,分割成同等結構的子問題,之後將子問題逐一解決後,原問題也就得到了解決。對於乙個長度為n的整數序列...
歸併排序(MergeSort)的原理及延伸性思考
前面一篇博文寫了歸併排序的演算法實現,雖然做了些注釋,但沒有寫歸併排序的原理,這篇就補上,同時對歸併所隱含的思想做乙個 1 歸併排序的原理 為了便於說明,這裡我們提到的已排好序的序列都是指從小到大的公升序 對於降序其實原理是一樣的。假設有兩個已排好序的序列a,b a a1 a2 a3 an i 1 ...