1.實踐題目
7-1 二分查詢 (20 分)
輸入n值(1<=n<=1000)、n個非降序排列的整數以及要查詢的數x,使用二分查詢演算法查詢x,輸出x所在的下標(0~n-1)及比較次數。若x不存在,輸出-1和比較次數。
輸入共三行: 第一行是n值; 第二行是n個整數; 第三行是x值。
輸出x所在的下標(0~n-1)及比較次數。若x不存在,輸出-1和比較次數。
4
1 2 3 4
1
0
22.問題描述
問題是讓我們用二分查詢法從建立的陣列中查詢我們要的數,並輸出該數在陣列中的下標以及查詢該數的過程中通過二分查詢法比較的次數。
3.演算法描述
首先將陣列a[n]分為兩部分,並通過比較x與a[2/n]的大小判斷,若剛好相等則輸出a[2/n]的下標數以及比較次數1,演算法終止。若x
輸出下標數及查詢次數,否則查詢失敗,返回結果-1。
#includeusingnamespace
std;
int bin(int a, int key, int
n)
if (key > a[middle])left = middle + 1
;
else
}cout
<< "-1"
intmain()
intx;
cin >>x;
bin(a, x, n);
//也可以cout"pause");
}
4.演算法空間及時間複雜度分析
每執行一次while迴圈,待搜尋的陣列大小減小一半,最好的時間複雜度是0(1),最壞是0(logn)
5.心得體會
本題的難度相對來說比較小,很適合我這樣之前對方法掌握不夠的人,同時在共同程式設計的過程鈞彥同學也給了我很大的幫助,包括思路上的梳理以及**上的糾正,總的來說,通過這一次實踐,我對二分查詢法以及分治法都有了更進一步的理解。
演算法第二章上機實踐報告
實踐題目名稱 找第k個小的數 問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。演算法描述 就是先假設a left 為這個分界值x,然後排序。比較x是不是第k個如果是,返回這個值。如果不是比較一下x和a k 的大小,如果xa k 遞迴在x的右邊找 演...
演算法第二章上機實踐報告
7 1 最大子列和問題 20分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資...
演算法第二章上機實踐報告
1,實踐題目名稱 最大子列和問題 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試...