孤月天心

无限野云风卷尽,一轮孤月照天心

堆排序

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;
}


阅读更多
个人分类: 数据结构与算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

堆排序

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭