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