7-1 二分查詢
輸入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
2
解題的思路是當left指標指向的下標大於right指標指向的下標時,陣列遍歷完畢,如果遍歷過程中找到了元素就停止遍歷,找不到就輸出-1.
**如下:
#include usingnamespace
std;
int search(int a,int x,int
n)
if(x>a[mid])
else
}if(l>r)
return -1;}
intmain()
cin>>x;
search(a,x,n);
return0;
}
7-2 改寫二分搜尋演算法
設a[0:n-1]是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。
輸入有兩行:
第一行是n值和x值; 第二行是n個不相同的整數組成的非降序序列,每個整數之間以空格分隔。
在這裡給出一組輸入。例如:
6 5
2 4 6 8 10 12
在這裡給出相應的輸出。例如:
1 2
#include #includeusing
namespace
std;
intmain()//
x是第一位的情況
mid = right; if(array1[mid] == x) //
x是最後一位的情況
mid = (left + right) / 2
;if(array1[mid] == x) //
找到x的情況
else
if(array1[mid] > x) right =mid;
else left =mid;
}if(result == 0)//
判斷result的值,若result仍為0則找不到x
}
第二章實驗報告
實踐題目名稱 找第k小的數 1.問題描述 設計乙個平均時間為o n 的演算法,在n 1 n 1000 個無序的整數中找出第k小的數。輸入格式 輸入有兩行 第一行是n和k,0第二行是n個整數 輸出格式 輸出第k小的數 輸入樣例 在這裡給出一組輸入。例如 10 4 2 8 9 0 1 3 6 7 8 2...
演算法第二章作業 實驗報告
實踐報告任選一題進行分析。內容包括 實踐題目名稱 7 1 最大子列和問題 問題描述 給定k個整數組成的序列,連續子列 被定義為,其中 1。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的...
演算法第二章上機實驗報告
實驗報告 1 實踐題目 pta第二題,改進二分搜尋演算法 2 問題描述 設a 0 n 1 是已排好序的陣列,請改寫二分搜尋演算法,使得當x不在陣列中時,返回小於x的最大元素位置i和大於x的最小元素位置j。當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置。3 演算法描述 整體框架 1 首先,還是...