1. 程式人生 > >第二章上機實驗報告

第二章上機實驗報告

時間 大致 ios arc 次數 運用 心得體會 空間復雜度 解法

1、實踐題目:7-1

2、問題描述:使用二分查找算法在n個非降序排列的整數中查找x,輸出x所在的下標(0~n-1)及比較次數。若x不存在,輸出-1和比較次數。

3、算法描述:將n個元素分成個數大致相同的兩半,取a[mid]與x比較。如果x=a[mid],則找到x,算法終止;如果x<a[mid],則只在數組a的左半部繼續查找x,如果x>a[mid],則只在a的右半部繼續搜索x。同時,在while語句裏加一個b統計比較次數。

4、代碼如下:

1 #include<iostream>
 2 using namespace std;
 3 int BinarySearch(int
a[],int left,int right,int x,int &b){ 4 while (left<=right){ 5 b++6 int middle =(left+right)/2; 7 if (x==a[middle]){ 8 return middle; 9 } 10 if(x>a[middle]){ 11 left=middle+1; 12 } 13 else { 14 right =middle-1
; 15 } 16 } 17 return -1; 18 } 19 int main(){ 20 int n,x,b=0; 21 cin>>n; 22 int a[1000]; 23 for (int i=0;i<n;i++){ 24 cin>>a[i]; 25 } 26 cin>>x; 27 int index=BinarySearch(a,0,n-1,x,b); 28 cout<<index<<endl<<b; 29
}

5、時間復雜度和空間復雜度:用了二分法搜索算法,尋找x的時間復雜度為O(logn);空間復雜度為數組空間大小,是一個常數,與變量n的取值無關。所以空間復雜度為O(1)

6、心得體會:要靈活地運用學過的代碼,將它們靈活地嵌入要解決的問題中。在解決問題時,要多考慮到最優解,也就是時間復雜度最小的解法,這有利於使算法更便捷,資源更能合理的運用。

第二章上機實驗報告