堆排序
在百度上找了一个代码,自己改了一下,但是这个sift函数感觉是不很明白,请各位高手注释一下。#include <stdio.h>
#include <stdlib.h>
void sift(int i,int m,int number[])
{
int k=2*i,temp;
temp=number[i];
while(k<=m)
{
if(k<m&&number[k]<number[k+1])
k++;
if(k<=m&&temp<number[k])
{
number[i]=number[k];
i=k;
k=2*i;
}
else
k=m+1;
}
number[i]=temp;
}
void heap_sort(int number[],int n)
{
int i,temp=0;
for(i=n/2;i>=0;i--)
sift(i,n,number);
for(i=n-1;i>=0;i--)
{
temp=number[i];
number[i]=number[0];
number[0]=temp;
sift(0,i-1,number);
}
}
int main()
{
int i,number[10]={0},n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&number[i]);
heap_sort(number,n);
for(i=0;i<n;i++)
printf("%d ",number[i]);
system("pause");
return 0;
}