深層次兩張圖解經典6大排序與6大基礎數據結構——學完這些,媽媽再也不用擔心我的排序算法與數據結構,學習筆記大放送


本文從冒泡排序撩起,對選擇、插入、希爾、歸並、快排6種經典的數組排序進行了深入分析,並詳解其間的關聯,讓你深刻理解其中的關鍵點;同時對經典的數據結構Vector、Stack、Queue、樹、Map、Set做了歸納總結,對其底層的實現做了解析,分享給大家,作為每一個中高級程序員應該懂得的算法與排序,祝大家早上走上自己的“成金之路”。

 
目錄:
1.排序算法
2.數據結構
3.資料參考
 
1.排序算法:
a.起源:
計算機從誕生起,就在模擬人這種智能生物的行為,而排序也來自於日常生活中,最經典的冒泡排序即來源於水泡從水底升上水面,離水面越近,水泡體積越大——由此誕生的冒泡排序思想即為:依次遍歷每個元素,如果前一個比后一個大,則交換兩者的位置。
其缺點有二:第一點每次比較都會產生交換元素的行為,效率低;第二點,算法復雜度為O(n^2)
 
b.針對缺點一的優化:
選擇排序:即每次遍歷只記錄最大元素的下標,最后進行元素交換;
 
插入排序:當輸入有序程度較高時,通過構建有序數組,並將新元素插入到有序數組中,完成整體的排序,降低元素交互的次數,缺點是不穩定;
希爾排序:插入排序穩定穩定程度太低,因此通過主動構建有序對(間隔n、n/2、n/4...1的有序對),來提升“插入排序”的穩定性,是插入排序的一種改進。
 
c.針對缺點二的優化:
歸並排序:采用“分治算法思想”,將輸入一分為二,分別排序,通過“並行”思想來提升算法效率,復雜度為O(nlgn),但是需要額外的arr[n]空間,來進行合並;
快速排序:對歸並排序的改進,在不需要額外空間的情況下,對數組遍歷,按對選定元素的比較進行划分,小的集中在左邊,大的集中在右邊;分別對兩邊進行排序——整體的思路與構建二叉樹一致,其復雜度為O(nlgn)。
 
d.偽代碼總結如下:

 

2.數據結構:
教學視頻參考斯坦福公開課《抽象編程》,地址為 http://open.163.com/special/opencourse/abstractions.html 
這里對主要的數據結構進行了拆解,如下圖

 

上圖只是詳解了其底層的結構,但是涉及到使用時,還需要提供一些常見接口,供調用者使用,如size()、iterator()/hasnext()/next()x、add()/remove()、contain()、isEmpty()等;見 代碼實現分享 鏈接:http://pan.baidu.com/s/1hsoReNa 密碼:h9q0。
 
 
另, 附上《抽象編程》總結筆記, 鏈接:http://pan.baidu.com/s/1jI6xZtc 密碼:4ik0,希望大家對數據接口及常見的排序有個更深層次的認識,編程時不僅僅會用,還要體會其底層實現,以最高效的方式,來完成程序,走上自己的“成金之路”;另,轉載請注明出處(百度搜“成金之路 博客園”)。 請不吝“推薦”
 
3.參考資料:
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM