赫夫曼编码中的select函数的更简单的思想是什么
void select(huffmantree ht, int n,int&s1,int&s2){
int j;
for(j=1;j<=n;j++)
if(ht[j].parent==0)
{
s1=j;
break;
}
for(j=j+1;j<=n;j++)
if(ht[j].parent==0)
{
s2=j;
break;
}
for(j=s1;j<=n;j++)
if(ht[j].parent==0)
if(ht[j].weight<ht[s1].weight) s1=j;
if(s1==s2)
for(j=s2+1;j<=n;j++)
if(ht[j].parent==0)
{
s2=j;
break;
}
for(j=1;j<=n;j++)
if(ht[j].parent==0&&j!=s1)
if(ht[j].weight<ht[s2].weight) s2=j;
printf("s1=%d,s2=%d\n",s1,s2);
}
这个是我写的,但是我觉得太麻烦了,有没有更简单的写法?希望各位高手指点一下。我觉得主要是找几个数中最小的两个先找一个再找一个太麻烦了,但暂时又想不出其他的好的方法。
[[it] 本帖最后由 miaorunhua 于 2008-6-22 13:04 编辑 [/it]]