冒泡、快速、歸併排序

一:冒泡排序:減治排序
二:快速排序:分治算法
步驟:
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.合併有序數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章