溫故知新,基礎複習(二元堆積排序),溫故知新堆排序

來源:互聯網
上載者:User

溫故知新,基礎複習(二元堆積排序),溫故知新堆排序

溫故知新,基礎複習(二元堆積排序)

最小堆(最終數組的資料是降序),最大堆(最終數組的資料是升序)


下例是最小堆


#include <stdio.h>#include <stdlib.h>void Swap(int Arra[],unsigned int LeftIndex,unsigned int RightIndex){int TeampValue = Arra[LeftIndex];Arra[LeftIndex]=Arra[RightIndex];Arra[RightIndex]=TeampValue;}void MinHeapFixDown(int Arra[],unsigned int StartIndex,unsigned int ArraSize){int TeampValue = Arra[StartIndex];unsigned int MinValueIndexOfChild = 2*StartIndex+1;while(MinValueIndexOfChild<ArraSize){//printf("%u,%d,%d,%d\n",StartIndex,TeampValue,MinValueIndexOfChild,ArraSize);if (MinValueIndexOfChild+1<ArraSize&&Arra[MinValueIndexOfChild]>Arra[MinValueIndexOfChild+1]){MinValueIndexOfChild=MinValueIndexOfChild+1;}if (Arra[MinValueIndexOfChild]>=TeampValue){break;}Arra[StartIndex]=Arra[MinValueIndexOfChild];StartIndex=MinValueIndexOfChild;MinValueIndexOfChild=2*StartIndex+1;}Arra[StartIndex]=TeampValue;}void BuildMinHeap(int Arra[],unsigned int ArraSize){if (ArraSize<2){return;}//printf("build start\n");for (unsigned int i = (ArraSize-1)/2+1; i >0; --i){MinHeapFixDown(Arra,i-1,ArraSize);}//printf("build end\n");}void HeapSort(int Arra[],unsigned int ArraSize){BuildMinHeap(Arra,ArraSize);printf("ArraSize=%d\n",ArraSize);for (unsigned int i = ArraSize-1; i >=1; --i){Swap(Arra,0,i);MinHeapFixDown(Arra,0,i);}}int main(){//int Arra[]={-6,-8,9,-3,-1,0,13,-15,28,-40};int Arra[]={-6,10,-7,15,-9,12,50,-35,9};HeapSort(Arra,sizeof(Arra)/sizeof(Arra[0]));for (int i = 0; i < sizeof(Arra)/sizeof(Arra[0]); ++i){printf("%d,",Arra[i] );}printf("\n");}




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

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