?? 選擇函數(shù).txt
字號:
void select(HuffmanTree HT, int k, int &s1, int &s2)
{ //在HT[1...k]中選擇parent為0且權值最小的兩個根結點,
//其序號分別為s1和s2,并靠引用參數(shù)帶回主調(diào)函數(shù)
int i, j;
int min1 = 32767;
for(i = 1; i <= k; i++) //找s1
if(HT[i].weight < min1 && HT[i].parent == 0){
j = i;
min1 = HT[i].weight;
}
s1 = j;
min1 = 32767;
for(i = 1; i <= k; i++) //找s2
if(HT[i].weight < min1 && HT[i].parent == 0 && i != s1){
j = i;
min1 = HT[i].weight;
}
s2 = j;
}
void Select(HuffmanTree HT, int t, int *s1, int *s2)
{
int m, n, i;
m = n = 10000;/*感覺有點取巧可以自己修改*/
for(i = 1; i <= t; i++)/*遍歷找兩個最小的結點*/
{
if(HT[i].parent == 0 /*m和n只是一個穿插的過程*/
&& (HT[i].weight < m || HT[i].weight < n))
{
if(m < n) /*把大的除去,小的繼續(xù)比較放那里*/
{
n = HT[i].weight;
*s2 = i;
}
else
{
m = HT[i].weight;
*s1 = i;
}
}
}
if(*s1 > *s2) /*把小的放前面*/
{
i = *s1;
*s1 = *s2;
*s2 = i;
}
}
for(i=0;i<n-1;i++){
x1=0;x2=0;
k=0;
for(int j=0;j<n+i;j++){//查找兩個權值最小的樹葉
if(HT[j].parent==0)
if(k==0){ //當找到第一個數(shù)時
x1=x2=j;k=1;
}
else if(HT[j].weight<HT[x1].weight){
x2=x1; x1=j;k=2; //當找到一個小于標記的最小數(shù)時
}
else if(HT[j].weight<HT[x2].weight) //當找到一個樹在標記最小的兩個數(shù)之間時
x2=j;
else if(k==1){//當只記錄了一個數(shù)時,
x2=j;k=2;
}
}//for
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -