對資料結構和演算法的總結和思考(一) 概覽

2021-08-09 20:25:27 字數 832 閱讀 6628

前段時間陸續看了各種排序演算法和查詢演算法,覺得不過癮,很多東西不系統,所以網上找了一本書程杰的《大話資料結構》。這段時間認真學習了全本內容,收穫頗多,想著就總結一下這段時間所學,所思,權當給大家乙個借鑑吧。

先從排序演算法說起
現在流行的排序演算法如果按型別分大致分為五大類:選擇排序類、插入排序類、交換排序類、歸併排序類和計數排序類,各有優劣,每種演算法的運用常見不一樣,但總體來說,交換排序類中的快速排序表現最優,所以使用得相對較多,各種語言都有對應的實現。

如果按複雜程度分,又分為簡單排序演算法和高階排序演算法。其中氣泡排序、簡單選擇排序、直接插入排序屬於簡單排序演算法。歸併排序、快速排序、希爾排序、計數排序、堆排序等屬於高階排序演算法。

如果按照是否比較分類,那麼可以分為比較類排序和非比較類排序,其中非比較類排序為計數排序其他均為比較類排序。

當然我這裡羅列的並不全,我學習並理解的也不止這些,不過相對來說這幾種排序演算法比較容易實現和理解,所以就選擇這幾種來分享,如果感興趣的童鞋可以自行搜尋學習~。

之後是查詢演算法
查詢有順序查詢、二分查詢、二叉查詢、多路查詢和雜湊查詢。其中二分查詢和二叉查詢是我要介紹的重點,他們都有優化方式的實現。二分查詢是乙個非常優秀的查詢,不過缺陷比較明顯是資料必須有序。二分查詢要將資料排成乙個二叉樹結構,相當於也是序列化了一次。多路查詢和二分查詢乙個道理。只有順序查詢沒有限制,但是查詢效率又太低。

之後是資料結構
資料結構中主要分為堆、棧、串、樹、圖。其中堆疊串都是我們很熟悉的結構,我會簡單帶過。樹結構用得最多最廣,也最有效,所以重點分享樹結構,圖結構比較複雜,並且用得不多,所以也不深入講解。

對資料結構和演算法的總結和思考(三) 希爾排序

希爾排序是第乙個時間複雜度突破o n 2 的高階演算法。顧名思義,這就是被希爾發現的一種排序演算法。演算法本質為分組插入排序。具體實現為 let count 0 function shellsort arr for gap gap 0 gap math.floor gap times arr fla...

對資料結構和演算法的總結和思考(五) 堆排序

本篇分享的內容為堆排序,提到堆排序就不得不提一下堆這個資料結構。堆實際上是一棵完全二叉樹,因此其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵...

對資料結構和演算法的總結和思考(七) 二分查詢

說起查詢演算法,二分查詢是肯定不能少的,當然鵝廠有些猿喜歡叫他歐巴馬查詢 二分查詢的時間複雜度為o logn 不線性查詢的時間複雜度o n 更優秀。核心思想 是將n個元素分成大致相等的兩部分,取a n 2 與x做比較,如果x a n 2 則找到x,演算法中止 如果x function binary ...