1. 程式人生 > >樹-堆結構練習——合併果子之哈夫曼樹

樹-堆結構練習——合併果子之哈夫曼樹

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