日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2017北京理工大学上机(二):二分查找

發布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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北京理工大学上机(二):二分查找的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。