堆排序

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值