关于CLR中堆排序若干问题的代码实现

  本来计划在2.12之前把Hash Label的问题结束,无奈前几天贪玩,今天才把堆排序的代码写出来.

 

#include  < stdio.h >
#include 
< math.h >

static   int  Heapsize = 10 ;
int  Right( int  i)
{
return 2*i+1;
}


int  Left( int  i)
return 2*i;
}


int  Parent( int  i)
return floor(i/2);
}


void  MaxHeapify( int  A[], int  i)
int l,r,largest,var;
  l
=Left(i);
  r
=Right(i);
  
if ((l<=Heapsize)&&(A[l]>A[i]))
     largest
=l;
  
else largest=i;
  
if ((r<=Heapsize)&&(A[r]>A[largest]))
     largest
=r;
  
if (largest!=i)
     
{var=A[i];
      A[i]
=A[largest];
      A[largest]
=var;
       MaxHeapify(A,largest);
     }

}


void  BuildMaxHeap( int  A[])
{
  
int j=floor(Heapsize/2);
  
for(;j>=1;j--)
      MaxHeapify(A,j);
}


void  HeapSort( int  A[])
int i,var;
  
for(i=10;i>=2;i--)
   
{ var=A[1];
     A[
1]=A[i];
     A[i]
=var;
     Heapsize
--;
     MaxHeapify(A,
1);
    }

}



void  main()
int A[11]={0,16,14,10,8,7,9,3,2,4,1};
  
int i=1;
  HeapSort(A);
  
for(;i<=10;i++)
   printf(
"No.%d=%d ",i,A[i]);
  getch();
}

   其中的MaxHeapify BuildMaxHeap HeapSort 本来是自己按书中内容分别实现的,现在归结为一个文件,遍于阅读.

通过学习,现在对递归调用有了初步的感官认识,但在深入到理论分析,例如主定理的应用和证明,以及实践当中还有很长的路要走.

  现在看到全书第二部分-排序和顺序统计学,终于结束了前段时间纯数理分析,虽然我对数学分析并不排斥,但终于能动手写代码,感觉很好.

  这次的代码虽然实现了算法及正确性,但是在组织语言上仍有待提高,特别关于Heapsize和数组下标的分配仍然需要改进.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值