heapsort.h
#ifndef HEAPSORT_H_INCLUDED
#define HEAPSORT_H_INCLUDED
#define MAXSIZE 1000
typedef struct
{
int R[MAXSIZE];
int length;
}sqlist;
typedef sqlist *Sqlist;
void Swap(Sqlist L,int i,int j);
void heapadjust(Sqlist L,int i,int j);
void heapsort(Sqlist L);
#endif // HEAPSORT_H_INCLUDED
heapsort.c
#include <stdio.h>
#include <malloc.h>
#include "heapsort.h"
void Swap(Sqlist L,int i,int j)
{
int temp;
temp=L->R[i];
L->R[i]= L->R[j];
L->R[j]=temp;
}
void heapadjust(Sqlist L,int s,int m)
{
int temp,j;
temp= L->R[s];
for(j=2*s;j<=m;j =2*j)
{
if(j<m && L->R[j]< L->R[j+1])
++j;
if(temp >= L->R[j])
break;
L->R[s]= L->R[j];
s=j;
}
L->R[s]=temp;
}
void heapsort(Sqlist L)
{
int i;
for(i=(L->length)/2;i>0;i--)
heapadjust(L,i,L->length);
for(i=L->length; i>1;i--)
{
Swap(L,1,i);
heapadjust(L,1,i-1);
}
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "heapsort.c"
int main()
{
int i;
int d[10]={50,30,21,44,65,52,78,42,78,90};
Sqlist L=(Sqlist )malloc(sizeof(sqlist));
L->length=10;
for(i=0;i <10;i++)
{
L->R[i+1]=d[i];
}
heapsort(L);
for(i=1;i <=10;i++)
printf("%d\t",L->R[i]);
getchar() ;
return 0;
}