排序總結 堆排

2021-08-22 18:18:50 字數 521 閱讀 8708

核心函式:adjustdown(nums, i, n)將 i 節點下沉

void adjustdown(int arr, int i, int n) 

else break;

}}

通過自底向上對每個節點呼叫下沉函式adjustdown, 就能實現建立最大堆/最小堆。(因為葉節點不存在子節點,所以實際上i從 n/2-1開始即可)。

void makeheap(int arr, int n)
接下來就可以進行堆排序了,給定乙個陣列,對它建最大堆,那麼它的0號節點就是最大值了,然後交換0號節點和最後乙個節點(n-1號節點),將陣列的有效長度縮為n-1, 並且對0號節點下沉,迴圈直至陣列長度變為0,得到的陣列就是從小到大排列好的了。

void heapsort(int arr, int n) 

}

排序總結 快排 歸併 堆排

1.煞筆快排 假設我們對陣列進行快速排序。首先在這個序列中找乙個數作為基準數,為了方便可以取第乙個數。遍歷陣列,將小於基準數的放置於基準數左邊,大於基準數的放置於基準數右邊。此時得到類似於這種排序的陣列。在初始狀態下7是第乙個位置,現在需要把7挪到中間的某個位置k,也即k位置是兩邊數的分界點。那如何...

排序演算法 堆排

堆排序 如果將堆結構中的資料看作是一顆完全二叉樹的各個節點,那麼堆的性質就是滿足如下性質的完全二叉樹 樹中任意非葉子節點的關鍵碼均不大於或不小於其左右孩子節點的關鍵碼。利用堆的有序性及其運算,可以容易的實現選擇排序的方法稱為堆排序。假設欲對含有n個物件的序列v 0 v 1 v n 1 進行堆排序,演...

排序 上 插排 希爾 堆排

給每個新增的數在已有的數列中找到合適的位置,然後插入進去 例如乙個由小到大的排序 原陣列為 4,5,2,9,3,6,8,7 現在我們有了乙個陣列,我們可以假裝現在排過序的只有第乙個數,也就是說已有序列是第乙個數 i和j是下標,key代表當前要插入的數,j代表當前已經插入到了第幾個數,i是動態的用來與...