部落格326 堆排序

2021-10-07 18:23:21 字數 889 閱讀 5556

內容:記錄常見排序演算法裡的堆排序

思路:

1、先將資料構建成最小堆或者最大堆(看從小排到大還是從大排到小來決定)

2、每次從堆頂取出乙個元素放到陣列前面或者後面,然後對剩下的元素進行堆調整

3、依次執行步驟2直至所有元素都已經排序好

應用:

1、可用於對大資料的排序,比如:多路歸併中也會用到類似思路

2、堆排序對原始元素的大小順序不敏感,不會對其排序效能產生太大影響

(不像快排,是有可能退化為冒泡的)

時間複雜度:

建立堆的時間複雜度:o

(n)堆調整的時間複雜度:o

(lgn)

整體時間複雜度:o

(n)+ n *

o(lgn)=o

(lgn)

**:

void

heap_adjust

(int a,

int min,

int max)

if(a[i]

<= tmp)

a[min]

= a[i]

; min = i;

} a[min]

= tmp;

}void

heap_sort

(int a,

int len)

for(

int i = len -

1; i >

0; i--

)}

排序 4 堆排序

將待排序的序列構成乙個大頂堆。此時,序列的最大值就是堆頂的根結點。將它移走 就是,將其與堆陣列的末尾元素交換,此時末尾的元素就是最大值 然後將剩餘的n 1個序列重新構成乙個堆,如此反覆。其中關鍵問題 1 如何將無序序列構成乙個堆 2 輸出堆頂元素後,如何調整公升序元素為乙個堆 4.堆排序 堆調整 v...

排序二 堆排序

子結點的鍵值或索引總是小於 或者大於 它的父節點。堆通過一維陣列實現。在起始陣列為 0 的情形中 父節點i的左子節點在位置 2 i 1 父節點i的右子節點在位置 2 i 2 子節點i的父節點在位置 floor i 1 2 堆中的最大值總是位於根節點。堆中定義以下幾種操作 1 最大堆調整 max he...

排序七 堆排序

時間複雜度 最好 o n o n 平均o n o nlogn 最差o n o nlogn 空間複雜度 o n o 1 穩定性 不穩定 堆 順序儲存的完全二叉樹,其每個結點均小於等於或大於等於其子節點。小根堆 每個結點元素的值都小於等於其子節點元素的值的堆。s i s 2 i 1 s i s 2 i ...