int FibSearch(SqList r, KeyType K) { j=1; while(fib(j)<n+1) j = j + 1; mid = n - fib(j-2) + 1; //若fib(j)=n+1,则mid=fib(j-1) f1 = fib(j-2); f2 = fib(j-3); found = FALSE; while((mid<>0) && !found) switch { case K=r[mid].key: found = TRUE; break; case K<r[mid].key: if(!f2) mid = 0; else { mid = mid-f2; t = f1 - f2; f1 = f2; f2 = t; } break; case K>r[mid].key: if(f1=1) mid = 0; else { mid = mid + f2; f1 = f1 - f2; f2 = f2 – f1; } break; } if(found) return mid; else return 0; }//FibSearch
其中fib(i)为斐波那契序列(若表中所有记录的关键字满足下列关系:ST.elem[i].key≤ST.elem[i+1}.key i=1,2,…n-1。则称表中记录按关键字有序)。试画出对长度为20的有序表进行斐波那契查找的判定树,并求在等概率时查找成功的平均查找长度。