直接插入排序
基本思想:
將一個記錄插入到已排序好的有序表中鞭衩,從而得到一個新鞠呈,記錄數(shù)增1的有序表商模。即:先將序列的第1個記錄看成是一個有序的子序列誉碴,然后從第2個記錄逐個進行插入,直至整個序列有序為止植酥。
要點:設(shè)立哨兵镀岛,作為臨時存儲和判斷數(shù)組邊界之用弦牡。
選擇排序
在要排序的一組數(shù)中,選出最屑菝獭(或者最大)的一個數(shù)與第1個位置的數(shù)交換卸留;然后在剩下的數(shù)當中再找最小(或者最大)的與第2個位置的數(shù)交換椭豫,依次類推耻瑟,直到第n-1個元素(倒數(shù)第二個數(shù))和第n個元素(最后一個數(shù))比較為止。
堆排序
以最大堆為例
以數(shù)組建堆
父節(jié)點必定比他的子節(jié)點小
父節(jié)點下標為i赏酥,則子節(jié)點下標為2i+1和2i+2
step1:建堆,假設(shè)長度為length
從最后一個有孩子節(jié)點(length-1)/2的節(jié)點開始喳整,往下做堆調(diào)整操作;之后再-1往前一個節(jié)點重復(fù)該操作
如上圖a,我們現(xiàn)在num[3]節(jié)點進行調(diào)整裸扶,即97框都,找出他的子節(jié)點較小的一個進行交換,49和97交換呵晨,繼續(xù)從往下調(diào)整魏保,直到數(shù)組結(jié)束或者該節(jié)點小于他的子節(jié)點,
重復(fù)操作直到建堆完畢摸屠。
step2:排序
每次將堆底元素和堆頂元素進行對換谓罗,然后對新的對頂元素重新進行滲透堆調(diào)整,數(shù)組長度-1季二;重復(fù)操作檩咱,直到排序完畢,此時數(shù)組呈倒序排列
代碼:
冒泡排序
基本思想:
在要排序的一組數(shù)中,對當前還未排好序的范圍內(nèi)的全部數(shù)刻蚯,自上而下對相鄰的兩個數(shù)依次進行比較和調(diào)整蜂筹,讓較大的數(shù)往下沉,較小的往上冒芦倒。即:每當兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時艺挪,就將它們互換。
快速排序
用分治思想來解決問題
優(yōu)化:可以對元素小于等8的可以采取選擇排序