// 小堆法
#include<stdio.h>
#include<stdlib,h>
typedef struct node{
int key;
}node_st;
#define SIZE 10
void swap(node_st *arr,int m,int n)
{
node_st temp=*(arr+m);
*(arr+m)=*(arr+n);
*(arr+n)=temp;
return NULL;
}
int HeapAdjust(node_st *arr,int s,int m)
{
node_st temp=*(arr+s);
int i;
for(i=2*s;i<SIZE;i *=2){
if((*(arr+i)).key>(*(arr+i+1)).key)
i++;
if(temp.key < (*(arr+i)).key)
*(arr+s)=*(arr+j);
s=i;
else
break;
}
*(arr+s)=temp;
return 0;
}
int HeapSort(node_st *arr)
{
int i;
for(i=SIZE/2;i>=0;i--){
HeapAdjust(arr,i,SIZE);
}
node_st temp;
for(i=SIZE;i>=0;i--){
temp=*arr;
*arr=*(arr+i);
*(arr+i)=temp;
HeapAdjust(arr,0,i-1);
}
return 0;
}
int main(int argc,char **argv)
{
node_st arr[SIZE];
int i;
for(i=0;i<SIZE;I++){
arr[i].key=atoi(argv[i+1]);
}
HeapSort(arr);
for(i=0;i<SIZE;i++)
printf("\t%d",arr[i].key);
printf("\n");
return 0;
}