【二元堆積、堆排序】

來源:互聯網
上載者:User

推薦:

某cppblog

wutianqi'sblog

堆排序實現:

#include <iostream>using namespace std; // 輸出當前堆的排序狀況void PrintArray(int data[], int size){    for (int i=1; i<=size; ++i)        cout <<data[i]<<"  ";    cout<<endl;} // 堆化,保持堆的性質// MaxHeapify讓a[i]在最大堆中"下降",// 使以i為根的子樹成為最大堆void MaxHeapify(int *a, int i, int size){int lt = 2*i, rt = 2*i+1;int largest;if(lt <= size && a[lt] > a[i])largest = lt;elselargest = i;if(rt <= size && a[rt] > a[largest])largest = rt;if(largest != i){int temp = a[i];a[i] = a[largest];a[largest] = temp;MaxHeapify(a, largest, size);}} // 建堆// 自底而上地調用MaxHeapify來將一個數組a[1..size]變成一個最大堆//注意:不能唯寫MaxHeapify(a, 1, size),因為這樣只會對左子樹或右子樹建堆,應該從下至上建堆!void BuildMaxHeap(int *a, int size){for(int i=size/2; i>=1; --i)MaxHeapify(a, i, size);} // 堆排序// 初始調用BuildMaxHeap將a[1..size]變成最大堆// 因為數組最大元素在a[1],則可以通過將a[1]與a[size]互換達到正確位置// 現在新的根項目破壞了最大堆的性質,所以調用MaxHeapify調整,// 使a[1..size-1]成為最大堆,a[1]又是a[1..size-1]中的最大元素,// 將a[1]與a[size-1]互換達到正確位置。// 反覆調用Heapify,使整個數組成從小到大排序。// 注意: 交換隻是破壞了以a[1]為根的二叉樹最大堆性質,它的左右子二叉樹還是具備最大堆性質。//        這也是為何在BuildMaxHeap時需要遍曆size/2到1的結點才能構成最大堆,而這裡只需要堆化a[1]即可。void HeapSort(int *a, int size){BuildMaxHeap(a, size);PrintArray(a, size); int len = size;for(int i=size; i>=2; --i){int temp = a[1];a[1] = a[i];a[i] = temp;len--;MaxHeapify(a, 1, len);cout << "中間過程:";PrintArray(a, size);} } int main(){int size;int arr[100];cout << "Input the num of elements:\n";cin >> size;cout << "Input the elements:\n";for(int i=1; i<=size; ++i)cin >> arr[i];cout << endl;    HeapSort(arr, size);cout << "最後結果:";    PrintArray(arr, size);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.