日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

堆排序(heap_sort)

發布時間:2024/9/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 堆排序(heap_sort) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、學習要點:
1.什么是堆?
a.完全二叉樹;
b.子樹滿足根節點數值小于左右子節點數值,為最小堆;滿足根節點數值大于左右子節點數值,為最大堆;
2.怎么維護堆的結構:
a.每一個子樹都應該維護堆結構;
b.自下而上維護堆的結構;【(5,6,3,7,8)至上而下的維護,不能將最大的值放到最前頭;】
3.堆排序:
不斷的構建完整的堆結構;將最大的元素arr[0]與arr[size-1]進行交換;對交換后的arr[size-1]在構建堆結構;將最大的元素arr[0]與arr[size-2]進行交換,重復進行。
二、代碼:

#include<iostream> using namedpace std; void heapdown(int *arr,int n,int i) {int left=2*i+1;int right=2*i+2;int max=i;if(left<=n-1&&arr[left]>arr[max]){max=left;}if(right<=n-1&&arr[right]>arr[max]){max=right;}if(max!=i){int temp=arr[i];arr[i]=arr[max];arr[max]=temp;heapdown(arr,n,max);} } void headup(int *arr,int n) {for(int i=(n-1-1)/2;i>=0;i--){heapdown(arr,n,i);} } void heapsort(int* arr,int n) {for(int i=n;i>0;i--){heapup(arr,i);int temp=arr[0];arr[0]=arr[i-1];arr[i-1]=temp;} } int main() {int a[10] = { 9,8,5,6,3,4,7,1,2,10 };heapsort(a,10);for (int i = 0; i < 10; i++){cout << a[i] << endl;}system("pause");return 0;}

三、運行結果:

總結

以上是生活随笔為你收集整理的堆排序(heap_sort)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。