不想解释原理了,就是创建堆,交
#include "stdio.h"
#include "stdlib.h"
#define N 10
void AdjustHeap(int a[],int i,int num)
{
int temp= a[i];
int j=0;
for (j =2*i; j <=num; j=j*2)
{
if (j<num&&a[j]<a[j+1])
{
j++;
}
if (a[j]<=temp)
{
break;
}
a[i]=a[j];
i=j;
}
a[i]=temp;
}
void swap(int a[],int i,int num)
{
int temp=a[i];
a[i]=a[num];
a[num]=temp;
}
void HeapSort(int a[],int num)
{
for (int i = (num)/2; i >0; --i)
{
AdjustHeap(a,i,num);
}
int b=1;
//排序
for (int i = num; i > 1; i--)
{
swap(a,1,i);
AdjustHeap(a,1,i-1);
}
}
int main(int argc, char const *argv[])
{
int a[N]={0,2,3,1,9,8,6,7,4,5};
HeapSort(a,N-1);
for (int i = 1; i < N; ++i)
{
printf("%d ",a[i]);
}
system("pause");
return 0;
}
换,调整堆,这么一个过程