排序是什么鬼

算法課最頭疼的就是什麼遞歸疊代、分治、排序這些魑魅魍魎。以致於寫推薦信找算法老師被問算法課考了多少分都羞於啟齒。畢竟人家不識妳,憑什麼給妳簽那個名字,而相反自己卻只是壹時興起,想著難度較大專業性強的算法課的老師的推薦信要靠譜些,實際上後來發現這只是無知惹的惑??坎豢孔V,還是要靠發論文的質量和數量及學界影響,當然在「學渣」的世界中攀不起院長,做不了項目實習生,所以必須曲線突圍。好在這個世界不止有一條路,如今卻又回到原點。補補當時落下的課目。

不就是數大數小的排序麼,小學就會了,只不過爲了計算的方便,非得搞出來那麼多名堂倒把人嚇退了,還要寫出來算法,計算其時間複雜性如此種種。其時算法主要是思路,有了思路,還怕寫不出程序。那我們就一一看來。

輸入是一個數組,裏面的數雜七雜八,算法的目的要把他們排成有序的數列。

直接排序(即插入排序,insertion sort)好比整理手中的撲克牌。第一張牌在手,已然有序,第二張抓上來的牌放在合適的位置,以後每次抓上來一張牌都插在合適的位置,這樣每時每刻都是有序的,直到牌抓完序也擺好。這些牌在手裏插起來很方便,只需「露開一個空檔」。但對於數組,這樣需要做的移動會比較多。

直接排序的最佳情形,就好比抓到的牌的順序是A23456789JQK。這樣初始有序,直接排序就省去插入環節,比較次數爲n(1+n)/2

二分插入排序 (binary sort)規避直接插入的盲目尋找,從中間一分爲二,第i個元素先跟前i-1個元素的中間元素比,小的話,就再同(i-1)/2個元素的中間元素比,直到找到合適的插入位置。

冒泡排序 (bubble sort)解決的是每次插入帶來的數組內移動的開銷。想法相對簡單,每次比較兩個元素,如果排序錯誤,就互相交換,直到沒有交換發生爲止。

快速排序 (quick sort)對冒泡有所改進,兵分兩路(i=0, j=n-1),把首數(a[0])作爲關鍵數,從尾部倒著找比它小的,最先找到的比它小的跟數組第i個(此時i=0)交換,再從頭部順著找比它大的,最先找到的跟第j個交換,然後j--, i++,重複此步驟直到i=j。上述是一趟排序,並不能確保這樣就排好序,需要將整個過程重複(即很多趟這樣的排序)直到沒有交換發生爲止。這裏面的想法是把整個數組始終分成大數一組和小數一組,然後通過不斷比較將小數排好,大數排好。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關系?...
    Zero___閱讀 3,182評論 3 49
  • 程序員創業白皮書 作者:Paul Graham Paul Graham是程序員,專欄作家。他在1995年創建了第一...
    劉立山John閱讀 1,944評論 0 20
  • 仙劍四玩到琴姬那部分,有種說不出的憋悶,仿佛胸口放進一塊大石,讓人喘不過氣。 琴姬是一個奇女子,人美,琴技高超,性...
    清凈墨蓮閱讀 374評論 1 1
  • 那條回鄉的路,已經被水泥石子硬化。從遠處的山頂望去,蜿蜿蜒蜒,沿著地壟、跳過小溪、爬上山坡,如一條綿延的灰色絲帶一...
    鳳兒有約閱讀 234評論 0 8