排序-冒泡

ref1.數據結構(c語言版)/
ref2.http://blog.csdn.net/u012580566/article/details/47703107(good)
http://blog.csdn.net/chenfs1992/article/category/2418987/5
ref3. http://blog.csdn.net/left_la/article/details/11925521
http://blog.csdn.net/acm_1361677193/article/details/48206603
ref4. 排序 javacode https://github.com/William-Hai/ArraySortAlgorithm/tree/master/src/org/algorithm/array/sort/impl
冒泡排序Bubble sort
原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換, 這樣一趟過去後,最大或最小的數字被交換到了最後一位, 然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束
http://www.cnblogs.com/heiqiaoshusheng/p/4086654.html

雞尾酒排序Cocktail sort
雞尾酒排序基於冒泡排序,雙向循環
http://www.cnblogs.com/heiqiaoshusheng/p/5281194.html

快速排序 Quick sort:
原理,通過一趟掃描將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列

插入排序:每一步都將一個待排數據按其大小插入到已經排序的數據中的適當位置,直到全部插入完畢。
常見的插入排序有插入排序(Insertion Sort),希爾排序(Shell Sort),二叉查找樹排序(Tree Sort),圖書館排序(Library Sort),Patience排序(Patience Sort)

基數排序 Radix sort:
原理類似桶排序,這裏總是需要10個桶,多次使用
首先以個位數的值進行裝桶,即個位數爲1則放入1號桶,爲9則放入9號桶,暫時忽視十位數

鴿巢排序Pigeonhole sort
原理類似桶排序,同樣需要一個很大的鴿巢[桶排序裏管這個叫桶,名字無所謂了]
鴿巢其實就是數組啦,數組的索引位置就表示值,該索引位置的值表示出現次數,如果全部爲1次或0次那就是桶排序

歸併排序Merge sort
原理,把原始數組分成若干子數組,對每一個子數組進行排序,
繼續把子數組與子數組合並,合併後仍然有序,直到全部合併完,形成有序的數組

選擇排序Selection sort
顧名思意,就是直接從待排序數組裏選擇一個最小(或最大)的數字,每次都拿一個最小數字出來,
順序放入新數組,直到全部拿完
再簡單點,對着一羣數組說,你們誰最小出列,站到最後邊
然後繼續對剩餘的無序數組說,你們誰最小出列,站到最後邊
再繼續剛纔的操作,一直到最後一個,繼續站到最後邊,現在數組有序了,從小到大

希爾排序Shell sort
希爾排序Shell Sort是基於插入排序的一種改進,同樣分成兩部分

堆排序
堆(二叉堆),指得不是堆棧的那個堆,而是一種數據結構。
堆可以視爲一棵完全的二叉樹,完全二叉樹的一個“優秀”的性質是,除了最底層之外,每一層都是滿的,這使得堆可以利用數組來表示,每一個結點對應數組中的一個元素

地精排序Gnome Sort
號稱最簡單的排序算法,只有一層循環,默認情況下前進冒泡,一旦遇到冒泡的情況發生就往回冒,直到把這個數字放好爲止

奇偶排序Odd-even sort
又一個比較性質的排序,基本思路是奇數列排一趟序,偶數列排一趟序,再奇數排,再偶數排,直到全部有序

梳排序Comb sort
梳排序還是基於冒泡排序,與冒泡不同的是,梳排序比較的是固定距離處的數的比較和交換,類似希爾那樣
這個固定距離是待排數組長度除以1.3得到近似值,下次則以上次得到的近似值再除以1.3,直到距離小至3時,以1遞減

耐心排序Patience Sorting
這個排序的關鍵在建桶和入桶規則上
建桶規則:如果沒有桶,新建一個桶;如果不符合入桶規則那麼新建一個桶
入桶規則:只要比桶裏最上邊的數字小即可入桶,如果有多個桶可入,那麼按照從左到右的順序入桶即可

珠排序Bead Sort
珠排序非常另類[地精也很另類],看完你就知道了,先介紹思路,再分解過程
這是它的英文論文 http://www.cs.auckland.ac.nz/~jaru003/research/publications/journals/beadsort.pdf
截圖即從上邊的論文裏抓的屏

計數排序Counting sort
注意與基數排序區分,這是兩個不同的排序
計數排序的過程類似小學選班幹部的過程,如某某人10票,作者9票,那某某人是班長,作者是副班長
大體分兩部分,第一部分是拉選票和投票,第二部分是根據你的票數入桶

Proxmap Sort
這個排序是桶排序和基數排序的改進,理解了前兩者,這個排序很容易理解
先回憶下桶排序是怎麼回事,它與桶的區別在於入桶規則,桶排序裏是1入1號桶,2入2號桶
這個排序把數字分區了,然後給出一個所謂的鍵,例如它規定0-9都入0號桶
10-19都入1號桶,這樣桶覆蓋的範圍將增大10倍,這在某種情況下是很有用的

Flash Sort
FlashSort依然類似桶排,主要改進了對要使用的桶的預測,或者說,減少了無用桶的數量從而節省了空間,例如
待排數字[ 6 2 4 1 5 9 100 ]桶排需要100個桶,而flash sort則由於可以預測桶則只需要7個桶
即待排數組長度個桶,如何預測將要使用的桶有這麼一個公式
flashsort
該排序有前置條件,需要知道待排數組的區間和待排數組的長度,

Strand Sort
Strand sort是思路是這樣的,它首先需要一個空的數組用來存放最終的輸出結果,給它取個名字叫”有序數組”
然後每次遍歷待排數組,得到一個”子有序數組”,然後將”子有序數組”與”有序數組”合併排序
重複上述操作直到待排數組爲空結束

Cycle Sort
Cycle sort的思想與計數排序太像了,理解了基數排序再看這個會有很大的幫助,
圈排序與計數排序的區別在於圈排序只給那些需要計數的數字計數,先看完文章吧,看完再回來理解這一句話
所謂的圈的定義,我只能想到用例子來說明,實在不好描述

圖書館排序(Library Sort)
思路簡介,大概意思是說,排列圖書時,如果在每本書之間留一定的空隙,那麼在進行插入時就有可能會少移動一些書,說白了就是在插入排序的基礎上,給書與書之間留一定的空隙,這個空隙越大,需要移動的書就越少,這是它的思路,用空間換時間
看紅線標的那句話知道,這個空隙留多大,你自己定
圖書館排序的關鍵是分配空間,分配完空間後直接使用插入排序即可
http://qubernet.blog.163.com/blog/static/17794728420111199573199/

類模板 雙向列表http://blog.csdn.net/redmoon955331/article/details/52453113

二叉樹遞歸排序
http://blog.csdn.net/left_la/article/details/11990553

發佈了33 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章