堆排序學習

今天回顧了一下堆排序,順便寫了一下,僅做記錄

 

#include <stdio.h>
void HeapAdjust(int a[], int m, int n)
{

    int i, sc=a[m];
    for(i=2*m;i<=n;i*=2)
    {
         if((i<n)&&(a[i]<a[i+1])) ++i;
         if(sc>=a[i]) break;
         a[m]=a[i];
         m=i;
    }
   a[m]=sc;
}

void HeapSort(int a[], int n)
{
    int i, temp;
    for(i=n/2; i>=1; i--) HeapAdjust(a, i, n);
    for(i=n; i>1; i--)
    {
         HeapAdjust(a, 1, i);
         temp=a[i];
        a[i]=a[1];
       a[1]=temp;
    }
}

int main(void)
{
     int i, a[11]={0, 4, 3, 5, 2, 7, 6, 1, 9, 8, 0};
     HeapSort(a,10);
     for(i=1;i<11;i++) printf("%d ",a[i]);
     return 0;
}

發佈了14 篇原創文章 · 獲贊 14 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章