图综合练习--拓扑排序_03 数据结构与算法 - 排序
生活随笔
收集整理的這篇文章主要介紹了
图综合练习--拓扑排序_03 数据结构与算法 - 排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 1. 冒泡排序 Bubble Sort
- 基本思想
- 給定一個數組,這些元素將通過相互之間的比較,按照大小順序一個個地像氣泡一樣浮出水面
- 基本思想
- 實現
- 每一輪,從頭部開始,每兩個元素比較大小進行交換,直到這一輪中最大或最小元素被放置到尾部,不斷重復,直到所有元素都排好位置
- 實現
- 代碼示例
- 時間復雜度
- O(n2)
- 穩定的排序算法
- 指如果數組里兩個相等的數,那么排序前后這兩個相等的數的相對位置保持不變
- 時間復雜度
- 2. 插入排序 Insertion Sort
- 基本思想
- 不斷地將尚未排好序的數,插入到已經排好序的部分
- 基本思想
- 特點
- 冒泡排序中,經過每一輪的排序處理后,數組后端的數是排好序的
- 插入排序中,經過每一輪的排序處理后,數組前段的數是排好序的
- 特點
- 解題思路
- 將數組分成左右兩個部分,左邊是已經排好序的部分,右邊是沒排序的部分
- 剛開始時,左邊只有第一個元素
- 接下來,對右邊的元素一個個進行處理,將他們放到左邊
- 解題思路
- 代碼示例
- 時間復雜度
- O(n2)
- 穩定的排序算法
- 時間復雜度
- 練習
- LC147:對一個鏈表進行插入排序
- 練習
- 3. 歸并排序 Merge Sort
- 基本思想
- 分治
- 把復雜的問題分成兩個或多個相同或相似的子問題,
- 然后把子問題分成更小的子問題,直到子問題可以簡單的直接求解,
- 圓問題的解,就是子問題解的合并
- 基本思想
- 實現
- 先把數組從中間劃分成兩個子數組,一直遞歸地把子數組劃分成更小的子數組,直到子數組里只有一個元素,才開始排序
- 排序方法:按照大小順序合并兩個元素,接著依次按照遞歸的返回順序,不斷地合并排好序的子數組,直到最后把整個數組的順序排好
- 實現
- 代碼示例
- 時間復雜度
- O(nlogn)
- 穩定的排序算法
- 時間復雜度
- 4. 快速排序 Quick Sort
- 基本思想
- 分治
- 基本思想
- 實現
- 從原始的數組,選取一基準值,篩選成較小和較大的兩個子數組,然后從兩個子數組不斷地挑選基準值,進行遞歸排序,當所有的子數組的元素個數都為 1 時結束
- 實現
- 代碼示例
- 復雜度
- 時間 最優:O(nlogn) 最壞:O(n2)
- 空間 O(logn)
- 復雜度
- 練習
- LC 215:給定一個尚未排好序的數組,要求找出第 k 大的數
- 解1 直接將數組進行排序,然后得出結果
- 解2 快速排序:每次隨機選取一個基準值,將數組分成較小的一半和較大的一半,然后檢查這個基準值最后所在的下標是不是 k,算法復雜度只需要 O(n)
- LC 215:給定一個尚未排好序的數組,要求找出第 k 大的數
- 練習
- 5. 拓撲排序 Topological Sort
- 前提
- 1. 圖必須是有向圖
- 2. 圖里面沒有環
- 用途
- 用來理清具有依賴關系的任務
- 用途
- 實現
- 1. 將問題用一個有向無環圖進行抽象表達,定義出哪些是圖頂點,頂點之間如何互相關聯
- 2. 可以利用廣度優先搜索 或 深度優先搜索 進行拓撲排序
- 實現
- 選擇一個沒有前驅(入度為 0)的頂點,輸出,然后刪除該頂點及相關的有向邊
- 重復上述操作
- 實現
- 代碼示例
- 時間復雜度
- O(n)
- 時間復雜度
總結
以上是生活随笔為你收集整理的图综合练习--拓扑排序_03 数据结构与算法 - 排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javawhile语句的用法例子_Pyt
- 下一篇: lstm结构图_神经网络——单层LSTM