氣泡排序:
一種比較容易理解的排序演算法,可以優化的程度也比較有限
平均: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 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二...