2017北京理工大学上机(二):二分查找
生活随笔
收集整理的這篇文章主要介紹了
2017北京理工大学上机(二):二分查找
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任何疑問、意見、建議請留言公眾號:一航代碼
題目描述:
原題為給出一個非遞減數列,寫出一個二分查找算法,輸出所查找數值的位置及查找次數。在此替換為PAT6-13 折半查找 (15分)
給一個嚴格遞增數列,函數int Search_Bin(SSTable T, KeyType k)用來二分地查找k在數列中的位置。
函數接口定義:
int?Search_Bin(SSTable?T,?KeyType?k);其中T是有序表,k是查找的值。
裁判測試程序樣例:
#include?<iostream> using?namespace?std;#define?MAXSIZE?50 typedef?int?KeyType;typedef?struct {KeyType?key; }?ElemType;typedef?struct {ElemType?*R;int?length; }?SSTable;void?Create(SSTable?&T) {int?i;T.R?=?new?ElemType[MAXSIZE?+?1];cin?>>?T.length;for?(i?=?1;?i?<=?T.length;?i++)cin?>>?T.R[i].key; }int?Search_Bin(SSTable?T,?KeyType?k);int?main() {SSTable?T;KeyType?k;Create(T);cin?>>?k;int?pos?=?Search_Bin(T,?k);if?(pos?==?0)cout?<<?"NOT?FOUND"?<<?endl;elsecout?<<?pos?<<?endl;return?0; }/*?請在這里填寫答案?*/輸入格式:
第一行輸入一個整數n,表示有序表的元素個數,接下來一行n個數字,依次為表內元素值。然后輸入一個要查找的值。
輸出格式:
輸出這個值在表內的位置,如果沒有找到,輸出"NOT FOUND"。
輸入樣例:
5
1 3 5 7 9
7
5
1 3 5 7 9
10
輸出樣例:
4
NOT FOUND
解決方法:
(1)算法思想:
畫圖理解:
?
(2)代碼實現:
可在https://pintia.cn/problem-sets/14/problems/44932判題
#include?<iostream> using?namespace?std;#define?MAXSIZE?50 typedef?int?KeyType;typedef?struct {KeyType?key; }?ElemType;typedef?struct {ElemType?*R;int?length; }?SSTable;void?Create(SSTable?&T) {int?i;T.R?=?new?ElemType[MAXSIZE?+?1];cin?>>?T.length;for?(i?=?1;?i?<=?T.length;?i++)?//注意這里下標從1開始,到lengthcin?>>?T.R[i].key; }int?Search_Bin(SSTable?T,?KeyType?k);?//聲明在定義之前int?main() {SSTable?T;KeyType?k;Create(T);cin?>>?k;int?pos?=?Search_Bin(T,?k);if?(pos?==?0)cout?<<?"NOT?FOUND"?<<?endl;elsecout?<<?pos?<<?endl;return?0; }int?Search_Bin(SSTable?T,?KeyType?k) {int?left?=?1,?right?=?T.length;?//注意下標從1開始,下面while循環不帶等號。while?(left?<?right){int?mid?=?(left?+?right)?/?2;?//注意if?(T.R[mid].key?<?k){left?=?mid?+?1;????????????//向后二分}else?if?(T.R[mid].key?>?k){right?=?mid?-?1;???????????//向前二分}else?if?(T.R[mid].key?==?k){return?mid;}}return?0; }?
?
總結
以上是生活随笔為你收集整理的2017北京理工大学上机(二):二分查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京理工大学—计算机专业课程资源
- 下一篇: C_北理工乐学_结构