第六章堆排序之“建堆BUILD-MAX-HEAP”(遞迴版)

來源:互聯網
上載者:User

自下向上對每一個結點或者只對每個非葉結點使用“保持堆的性質”即“堆調整”MAX-HEAPIFY

#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void MaxHeapIfy(int *a,int i,int heapSize){int left=i<<1;int right=(i<<1)+1;int tmp;int largest=i;if(left<=heapSize&&a[i]<a[left]){largest=left;}if(right<=heapSize&&a[largest]<a[right]){largest=right;}if(i!=largest)//不加這個判斷可能會產生死迴圈,遞迴一個勁的在i這打轉 {tmp=a[i];a[i]=a[largest];a[largest]=tmp;MaxHeapIfy(a,largest,heapSize);}}void Output(int *a,int len){int i=1;for(i=1;i<=len;i++){printf("%d ",a[i]);}printf("\n");}void BuildMaxHeap(int *a,int heapSize){int i=0;for(i=BUFFER_SIZE/2;i>0;i--){MaxHeapIfy(a,i,heapSize);}}int main(){int i=0;int a[BUFFER_SIZE+1];//第一個位置即a[0]不用,這樣計運算元節點的索引簡單點。 memset(a,0,sizeof(a));srand((unsigned)time(NULL));for(i=1;i<=BUFFER_SIZE;i++){a[i]=rand()%BUFFER_SIZE;}printf("隨機產生數組:"); Output(a,BUFFER_SIZE);BuildMaxHeap(a,BUFFER_SIZE);printf("建立的最大堆為:");Output(a,BUFFER_SIZE);system("pause");return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.