資料結構學習之 排序高階(堆排序)

2021-09-29 22:28:32 字數 1491 閱讀 7517

氣泡排序:

一種比較容易理解的排序演算法,可以優化的程度也比較有限

平均:o(n^2)

最壞:o(n^2)

最好:o(n)

最好情況需要在進行迴圈之前加入標誌位,若一次遍歷中,沒有任何兩個資料被交換,則認為序列已經有序,跳出迴圈。此時,時間複雜度為o(n)

插入排序:

選擇乙個資料插入到前面已經排好的有序佇列之中

平均:o(n^2)

最壞:o(n^2)

最好:o(n)

這兩種演算法中規中矩,便於理解但是對於較大規模的資料排序而言,顯得有些笨重,所以學習一下比較高階的排序演算法。

堆排序的基本思路與之前的最大堆的建立和刪除緊密聯絡,二者基本使用了同樣的方法,將資料一一插入最大堆後依次輸出。

時間複雜度:

最好情況:o(nlog(n))

最壞情況:o(nlog(n))

空間複雜度:o(1)

最大堆的建立插入和刪除在之前的文章裡已經有過介紹。

參考前面最大堆的文章

依次將需要排序的資料插入到最大堆中,輸入全部資料後,依次輸出即為順序排序好的資料。

//最大堆的插入

intinsert

(struct tree t)

while

(len)

else

maxheap[len]

= t;

} maxheap[len]

= t;

return0;

}//最大堆的刪除

情況比快速排序時間稍差些,但是比常規的基礎排序20s以上時間上還是快了非常多的

資料結構學習筆記 堆排序

堆是一棵完全二叉樹。每個結點的值都大於等於該結點的孩子結點的堆稱為大頂堆,反之則稱為小頂堆。為了使用簡便,我們就用陣列heap來儲存堆結構,heap 1 儲存堆的根結點,如果當前遍歷的結點為heap i 則heap 2i 和heap 2i 1 分別為其左右孩子結點。在了解了堆結構定義之後,我們就可以...

資料結構學習筆記 堆和堆排序

堆,是一種特殊的樹 經典的應用場景,堆排序,原地的時間複雜度為o nlogn 的排序演算法 堆的兩點定義 每個節點的值都大於等於子樹中每個節點值的堆叫做大頂堆,反之叫做小頂堆 之前說過完全二叉樹適合用陣列儲存,所以堆也用陣列儲存 堆的核心操作有插入元素和刪除堆頂元素,以大頂堆為例 插入元素 todo...

15 資料結構高階十五排序實現之堆排序

15.資料結構高階十五排序實現之堆排序 誰要是遊戲人生 他就一事無成 誰不能主宰自己 永遠是乙個奴隸 歌德 繼續來看下堆排序。堆排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二...