数据结构之选择排序:堆排序
生活随笔
收集整理的這篇文章主要介紹了
数据结构之选择排序:堆排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
選擇排序:堆排序
- 思維導圖:
- 堆的概念:
- 堆的初始化:
- 堆排序的算法思想:
- 堆排序代碼實現:
- 堆排序的插入:
- 堆排序的刪除:
- 堆排序的性能:
思維導圖:
堆的概念:
根>=左右孩子節點的順序存儲二叉樹
i的范圍為n/2取下界,即最后一個雙親節點
小根堆:
大根堆:
堆的初始化:
以大根堆為例:
代碼實現:
時間復雜度: O(n) 與樹的高度h有關
堆排序的算法思想:
1、建立一個大根堆
2、將堆頂元素與待排序序列最后一個元素交換
3、將待排序序列再次調整為大根堆
堆排序代碼實現:
void HeapSort(int a[],int len){int temp;BuildMaxHeap(a,len);for(int i=len;i>1;i--){temp = a[i];a[i] = a[1];a[1] = temp;AdjustDown(a,1,i-1); //每輸出一個元素,i就要減1} }int main(){int i;int a[5] = {NULL,2,11,6,9};HeapSort(a,4);for(i=1;i<5;i++)printf("%d\t",a[i]); }堆排序的插入:
代碼實現:
堆排序的刪除:
被刪除的元素用堆底元素代替,然后讓該元素不斷“下墜”,直到無法下墜為止
1、代替
2、下墜
堆排序的性能:
時間復雜度: O(nlog2n)
時間復雜度: O(1)
不穩定
總結
以上是生活随笔為你收集整理的数据结构之选择排序:堆排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lecture 2 Introducti
- 下一篇: 超级密码(bfs)