演算法第二章實驗報告

2022-09-12 19:42:10 字數 1373 閱讀 7782

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 using

namespace

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 #include 

using

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 首先,還是...