樹-堆結構練習——合併果子之哈夫曼樹
阿新 • • 發佈:2018-12-09
#include <stdio.h>
#include <stdlib.h>
void quick(int a[],int l,int r)
{
int i,j,x;
i=l;
j=r;
x=a[l];
while(l>=r) return ;
while(i<j)
{
while(i<j&&a[j]>=x) j--;
a[i]=a[j];
while(i<j&&a[i]<=x) i++;
a [j]=a[i];
}
a[i]=x;
quick(a,l,i-1);
quick(a,i+1,r);
}
int main()
{
int n,a[200001],i,x,y,s,sum=0,j,k;
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
i=1;
quick(a,1,n);
while(i!=n)
{
x=a[i++];
y=a[i++];
s=x+y;
sum+=s;
for(j=i; j<=n; j++)
if(a[j]>=s) break;//找到第一個比他大的數,跳出;
//如果沒有一個比它大的數。則略過一下兩行的for迴圈,保持有序性
for(k=n; k>=j; k--)
a[k+1]=a[k];
a[j]=s;
n++;
}
printf("%d\n",sum);
return 0;
}