排序是什么鬼

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

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

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

直接排序(即插入排序,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,185评论 3 49
  • 程序員創業白皮書 作者:Paul Graham Paul Graham是程序員,專欄作家。他在1995年創建了第一...
    刘立山John阅读 1,971评论 0 20
  • 仙剑四玩到琴姬那部分,有种说不出的憋闷,仿佛胸口放进一块大石,让人喘不过气。 琴姬是一个奇女子,人美,琴技高超,性...
    清净墨莲阅读 384评论 1 1
  • 那条回乡的路,已经被水泥石子硬化。从远处的山顶望去,蜿蜿蜒蜒,沿着地垄、跳过小溪、爬上山坡,如一条绵延的灰色丝带一...
    凤儿有约阅读 238评论 0 8