堆排序中構造最大堆C C

2021-06-29 15:47:10 字數 939 閱讀 8969

在堆排序演算法中,我們使用的是最大堆。下面的**是給定一組數,構造乙個最大堆。left(heap, location)和right(heap, location)分別返回陣列heap中location的左右孩子的索引。max_heapify(heap, i)是確保heap陣列的i的左右孩子都滿足最大堆化。bulid_max_heap(heap)將heap陣列構造乙個最大堆。

/*

構造乙個num個數最大堆;

*/#include#includeusing namespace std;

const int num = 10;

void print(int p , int n)

}int left(int heap , int i)

int right(int heap , int i)

void max_heapify(int heap, int location)

else

largest = location;

if (r <= num && heap[r] > heap[largest])

if (location != largest) }

void bulid_max_heap(int heap)

}int main()

; srand(time(null));

for (int i = 1; i <= num; i++)

print(heap, num);

bulid_max_heap(heap);

cout << "-------------" << endl;

print(heap, num);

return 0;

}

結果如下:

最大堆 排序

解除安裝最前面,下面的所有討論都是基於二叉堆 一 什麼是堆 堆是乙個陣列結構,可以看著為一顆完全二叉樹,把這顆完全二叉樹按層從上到下,每層從左至右編序號,每個序號所對應的元素即為陣列中該序號的元素 該樹出最後一層以外每一層都排滿,最後一層從左至右,先左孩子再右孩子排列,如果有父節點沒有排滿孩子 無孩...

最大堆排序

其實堆排序就是對二叉樹的一種操作,使得二叉樹的左右孩子 節點都小於父節點。我使用的是陣列的實現方式,parent i return i 2 i的父節點下標,left i return 2 i i的左子節點 right i return 2 i 1 i的右子節點.以上均為陣列元素的標號位置,在訪問元素...

最大堆實現堆排序

堆排序 這裡使用的是最大堆 思想 1 將當前的堆轉換成最大堆 從最大的非葉子結點開始,1 判斷根結點和左右結點的大小交換相互的位置,使得該子樹成為最大堆,每次交換成功後就繼續往該結點的子結點去重複 1 操作,直到根結點後再去下乙個非葉子結點,直到根結點 2 轉成最大堆後,每次就將第乙個結點互最後乙個...