今天回顧了一下堆排序,順便寫了一下,僅做記錄
#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;
}