首先回顧下各種排序的主要思路:
一.冒泡排序
冒泡排序主要思路是:
通過交換使相鄰的兩個數(shù)變成小數(shù)在前大數(shù)在后致板,這樣每次遍歷后彬向,最大的數(shù)就“沉”到最后面了。重復(fù)N次即可以使數(shù)組有序。
冒泡排序改進(jìn)1:在某次遍歷中如果沒有數(shù)據(jù)交換酌儒,說明整個數(shù)組已經(jīng)有序窒百。因此通過設(shè)置標(biāo)志位來記錄此次遍歷有無數(shù)據(jù)交換就可以判斷是否要繼續(xù)循環(huán)撮胧。
冒泡排序改進(jìn)2:記錄某次遍歷時最后發(fā)生數(shù)據(jù)交換的位置是钥,這個位置之后的數(shù)據(jù)顯然已經(jīng)有序了。因此通過記錄最后發(fā)生數(shù)據(jù)交換的位置就可以確定下次循環(huán)的范圍了肖爵。
二. 直接插入排序
直接插入排序主要思路是:
每次將一個待排序的數(shù)據(jù)卢鹦,插入到前面已經(jīng)排好序的序列之中,直到全部數(shù)據(jù)插入完成劝堪。
三. 直接選擇排序
直接選擇排序主要思路是:
數(shù)組分成有序區(qū)和無序區(qū)冀自,初始時整個數(shù)組都是無序區(qū),然后每次從無序區(qū)選一個最小的元素直接放到有序區(qū)的最后秒啦,直到整個數(shù)組變有序區(qū)熬粗。
上面這三種排序都是非常簡單的,下面這四種排序略有難度余境,希望讀者能多多實踐以加深理解驻呐。
四. 希爾排序
希爾排序主要思路是:
先將整個待排元素序列分割成若干個子序列(由相隔某個“增量”的元素組成的)分別進(jìn)行直接插入排序,然后依次縮減增量再進(jìn)行排序芳来,待整個序列中的元素基本有序(增量足夠泻)時,再對全體元素進(jìn)行一次直接插入排序即舌。由于希爾排序是對相隔若干距離的數(shù)據(jù)進(jìn)行直接插入排序答渔,因此可以形象的稱希爾排序為“跳著插”
五. 歸并排序
歸并排序主要思路是:
當(dāng)一個數(shù)組左邊有序,右邊也有序侥涵,那合并這兩個有序數(shù)組就完成了排序。如何讓左右兩邊有序了宋雏?用遞歸芜飘!這樣遞歸下去,合并上來就是歸并排序磨总。
六. 快速排序
快速選擇排序主要思路是:
“挖坑填數(shù)+分治法”嗦明,首先令i =L; j = R; 將a[i]挖出形成第一個坑,稱a[i]為基準(zhǔn)數(shù)蚪燕。然后j--由后向前找比基準(zhǔn)數(shù)小的數(shù)娶牌,找到后挖出此數(shù)填入前一個坑a[i]中奔浅,再i++由前向后找比基準(zhǔn)數(shù)大的數(shù),找到后也挖出此數(shù)填到前一個坑a[j]中诗良。重復(fù)進(jìn)行這種“挖坑填數(shù)”直到i==j汹桦。再將基準(zhǔn)數(shù)填入a[i]中,這樣i之前的數(shù)都比基準(zhǔn)數(shù)小鉴裹,i之后的數(shù)都比基準(zhǔn)數(shù)大舞骆。因此將數(shù)組分成二部分再分別重復(fù)上述步驟就完成了排序。
七. 堆排序
堆排序主要思路用張圖示來表示更好:
可見堆排序的難點就在于堆的的插入和刪除径荔。
堆的插入就是——每次插入都是將新數(shù)據(jù)放在數(shù)組最后督禽,而從這個新數(shù)據(jù)的父結(jié)點到根結(jié)點必定是一個有序的數(shù)列,因此只要將這個新數(shù)據(jù)插入到這個有序數(shù)列中即可总处。
堆的刪除就是——堆的刪除就是將最后一個數(shù)據(jù)的值賦給根結(jié)點狈惫,然后再從根結(jié)點開始進(jìn)行一次從上向下的調(diào)整。調(diào)整時先在左右兒子結(jié)點中找最小的鹦马,如果父結(jié)點比這個最小的子結(jié)點還小說明不需要調(diào)整了胧谈,反之將父結(jié)點和它交換后再考慮后面的結(jié)點。相當(dāng)于從根結(jié)點開始將一個數(shù)據(jù)在有序數(shù)列中進(jìn)行“下沉”菠红。
因此第岖,堆的插入和刪除非常類似直接插入排序,只不是在二叉樹上進(jìn)行插入過程试溯。所以可以將堆排序形容為“樹上插”
再用一張圖表示下這七種常用的排序方法的關(guān)系蔑滓。
推薦閱讀:
經(jīng)典排序算法系列1----冒泡排序的實現(xiàn)
經(jīng)典排序算法系列2----插入排序的實現(xiàn)
經(jīng)典排序算法系列3----直接選擇排序及交換二個數(shù)據(jù)的正確實現(xiàn)
經(jīng)典排序算法系列4----希爾排序的實現(xiàn)
經(jīng)典排序算法系列5----歸并排序
經(jīng)典排序算法系列6----快速排序
經(jīng)典排序算法系列7----堆與堆排序
經(jīng)典排序算法系列8----7大排序算法總結(jié)篇
經(jīng)典排序算法系列9----分配排序(桶排序和基數(shù)排序)