折半查詢(除錯)

2021-08-19 14:21:27 字數 597 閱讀 1735

源程式錯誤

int binsearch(int *arr,int len,int key)

else if(arr[mid] < key)//後半段查詢

else

}return -1;

}int main()

; for(int i=0;i<13;i++)

return 0;

}

除錯分析:

(0+9)/2=4  5<9  mid=4 high=9

(4+9)/2=6  7<9  mid=6 high=9

(6+9)/2=7  8<9  mid=7 high=9

(7+9)/2=8  9<9(錯誤)

因函式進行迴圈時先執行arr[mid] == key,即比較過一次

所以else if 時

如果是low=mid時,所以應把後乙個陣列位址賦值給low

同樣high=mid時,所以應把前乙個陣列位址賦值給high

1.while(low 改為 while(low <=high)

2.else if(arr[mid] < key)

else



折半查詢(除錯)

折半查詢 數字 1,2,3,4,5,6,7,8,9,10 下標 0,1,2,3,4,5,6,7,8,9 0 9 2 4 low 5 5 9 輸出 4 9 2 6 low 7 7 9 輸出 6 9 2 7 low 7 8 9 輸出 7 9 2 8 low 9 9 9 錯誤 不能輸出,所以程式改正時應加...

查詢 折半查詢

折半查詢 int search keytype key,int n,keytype k return 1 查詢失敗,返回 1 在演算法中,n表示記錄的個數。key表示要查詢的關鍵字。key為關鍵字順序表,每個元素都是對應記錄的關鍵字。例如key 0 為第0個記錄的關鍵字。如果每條記錄的資訊與它的關鍵...

查詢之折半查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...