算法實驗報告----1


一、  實踐題目

第一題:二分查找

二、  問題描述

輸入n值(1<=n<=1000),n個非降序排列的整數以及查找的數x,使用二分查找x,輸出x所在的下標(0~n-1)及比較次數。若x不存在,輸出-1和比較次數。

三、  算法描述

1.關鍵部分算法描述:

 

int binary_search(vector<int>v,int key)

{

          int left=1,right=v.size()-1,mid;

          while(left<=right)

         {

              mid=(left+right)/2;

              if(v[mid]<key) left=mid+1;

              else if(v[mid]>key) right=mid-1;

              else if(v[mid]==key) return mid;

         }

         return -1;

}

          2.首先查找這個序列是有序的,從中間開始查找,如果小於或大於中間值,那么相應的最高和最低下標就要更改為中間值減一或加一。如此重復直到找到相應的值為止。

四、  算法時間及空間復雜度分析(要有分析過程)

時間復雜度:O(h)=O(log2n)

 

                 設共有n個元素,

        經過while()的n值由n,n/2,n/4,…,n/2^k,由於n/2^k要取整,即令n/2^k = 1,可得k = log2n.

                 空間復雜度:0(n) = 1

       

                 沒有申請其他空間。

五、  心得體會(對本次實踐收獲及疑惑進行總結)

  1. 一個組進行編寫代碼,效率比自己一個編寫的時候要高。因為不用再某個地方卡很久,會有組員相互解釋。

 

         2.更深一步理解了二分法,我覺得二分法是比較容易理解也比較容易實現的算法,但是二分法的要求是順序存儲以及數據都按照一定的規律排好序的,要求比較多,我們在實際應用的時候要根據需求靈活使用。

 

         3.PTA上的錯誤有時候讓人摸不着頭腦,我們應該怎么提高答題的准確率呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM