一:冒泡排序:減治排序
二:快速排序:分治算法
步驟:
1.在整個待排序空間內找一個基準值
2.遍歷整個待排序區間,將全部數據和基準值進行比較,最終達到
比基準值大的(能夠包含等於的)在基準值的右邊
比基準值小的(能夠包含等於的)在基準值的左邊
3.用一樣的策略處理左右兩個小的待排序區間,直到
a:小區間內沒有數據了(size==0)
b:小區間已經有序(size==1)
聚焦在第一步,爲了不取最邊上爲基準值致使的,若是數據已經有序、逆序就是最壞狀況
1)最邊上
2)隨機取
3)多數取中(三數取中)
第二步有四種方法:
1)左右往中間靠: a:hover b:挖坑
2)先後遍歷 a:先後遍歷 b:把和基準值相等的單獨處理
如何計算時間複雜度:
1)partition的過程,時間複雜度爲O(n)
2)肯定作多少層partition:
能夠把分治的過程當作一棵二叉樹,其高度就是層數
二叉樹的高度:O(log(n))-O(n))
如何計算空間複雜度:
1)肯定遞歸方法的調用棧須要最多多少層:
須要二叉樹的高度層,因此爲O(log(n))-O(n)
三:歸併排序(合併排序):
合併兩個有序數組的過程
0.平均切分待排序區間,若是待排序的左右兩個小區間已經有序,
則按照合併有序數組的方式,使最終區間有序
1.先找到中間位置,劃分左右兩個小區間,直到小區間的長度==1或<1
2.分治的思想,先排序左右兩個小區間
3.合併有序數組算法