1. 程式人生 > >二分查詢時間複雜度的計算

二分查詢時間複雜度的計算

二分查詢的基本思想是將n個元素分成大致相等的兩部分,去a[n/2]與x做比較,如果x=a[n/2],則找到x,演算法中止;如果x<a[n/2],則只要在陣列a的左半部分繼續搜尋x,如果x>a[n/2],則只要在陣列a的右半部搜尋x.

時間複雜度無非就是while迴圈的次數!

總共有n個元素,

漸漸跟下去就是n,n/2,n/4,....n/2^k,其中k就是迴圈的次數

由於你n/2^k取整後>=1

即令n/2^k=1

可得k=log2n,(是以2為底,n的對數)

所以時間複雜度可以表示O()=O(logn)

  1. 二分查詢的時間複雜度是O(log(n)),最壞情況下的時間複雜度是O(n)。
  2. 二分查詢的一個條件是待查詢的陣列是有序的,我們假設這裡的陣列是升序的。
  3. 二分查詢的主要思路就是設定兩個指標start和end分別指向陣列元素的收尾兩端,然後比較陣列中間結點arry[mid]和待查詢元素。如果待查詢元素小於中間元素,那麼表明帶查詢元素在陣列的前半段,那麼將end=mid-1,如果待查詢元素大於中間元素,那麼表明該元素在陣列的後半段,將start=mid+1;如果中間元素等於待查詢元素,那麼返回mid的值。

二分查詢可以使用遞迴非遞迴的方法來解決