为了账号安全,请及时绑定邮箱和手机立即绑定

关于合并石子的哈夫曼树算法,相邻两堆石子可交换,不太理解这个代码的排序,

关于合并石子的哈夫曼树算法,相邻两堆石子可交换,不太理解这个代码的排序,

C
weibo_殇雨916_0 2016-05-03 14:47:59
#include <stdio.h> int split(int A[],int low,int high) {  int i=low,k;  int temp;  for(k=low+1;k<=high;k++)   {   if(A[k]<A[low])   {    i++;    if(i!=k)     temp=A[i],A[i]=A[k],A[k]=temp;   }}  temp=A[i],A[i]=A[low],A[low]=temp;  return i; } void quick_sort(int A[],int low,int high) {  int k;  if(low<high)  {   k=split(A,low,high);   quick_sort(A,low,k-1);   quick_sort(A,k+1,high);  } } int main() {  int n,*A,i,j,k,l,s,a[2],sum;  while(scanf("%d",&n)!=EOF)  {   A=new int[2*n+1];   for(i=0;i<n;i++)    scanf("%d",&A[i]);   quick_sort(A,0,n-1);   i=0,j=k=n;   sum=0;   for(s=1;s<=n-1;s++)   {    for(l=0;l<=1;l++)    {     if(i<n)     {      if(j<k && A[j]<A[i])       a[l]=A[j++];      else       a[l]=A[i++];      continue;     }     else      a[l]=A[j++];    }    sum+=a[0]+a[1];    A[k++]=a[0]+a[1];   }   printf("%d\n",sum);   delete[] A;  }  return 0; }
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 1482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信