倒置陣列元素查詢 時間複雜度O lgn

2021-06-02 07:54:44 字數 1709 閱讀 9313

/**

* * @author jiadongkai

* @date dec 2, 2011

* */

public class binsearch

return -1;

}static int count ;

/*** [1,2,3,4,5]->[4,5,1,2,3]

* 在倒置的陣列中查詢乙個元素

* * 選取mid之後,前後必有一半是有序的。比較low/mid-1和mid+1/high

* 這兩對位置的值就知道

* 如果num落在有序的一半,

* 接下來的查詢都變成折半查詢;如果num落在無序的一半,

* @param arr

* @param num

* @return

*/public static int exbinsearch(int arr, int num)else

continue;

}if( !flag && arr[mid+1] <= arr[high])else

continue;

}//能執行下面的邏輯,必然是已經確定num落在有序的部分了

if( arr[mid] < num )

low = mid + 1;

else

high = mid - 1;

}return -1;

}public static void main(string args);

int arr2 = ;

int demo = ;

for(int i : demo)

}}

---------比較i=1-------------

1的index:0

比較次數:3

進入有序陣列:3  -> 3

1的index:3

比較次數:4

---------比較i=3-------------

3的index:1

比較次數:8

3的index:4

比較次數:3

---------比較i=5-------------

5的index:2

比較次數:5

5的index:5

比較次數:4

---------比較i=11-------------

11的index:-1

比較次數:8

進入有序陣列:7 -> 13

11的index:-1

比較次數:4

---------比較i=100-------------

100的index:13

比較次數:8

100的index:2

比較次數:2

---------比較i=56-------------

56的index:10

比較次數:4

進入有序陣列:7 -> 13

56的index:13

比較次數:4

---------比較i=90-------------

90的index:-1

比較次數:8

90的index:-1

比較次數:4

---------比較i=1000-------------

1000的index:-1

比較次數:8

1000的index:-1

比較次數:4

二分查詢時間複雜度推導

二分查詢是乙個非常常用且簡潔的查詢演算法,相信很多人也知道它的時間複雜度是logn,但是我看網上的大多數部落格給出的所謂推導過程都十分不嚴謹,於是我花了些時間自己寫了推導過程。首先上二分查詢的 public int find int x,int data 查詢元素下標,沒找到返回 1 param x...

查詢與排序01,線性查詢,時間複雜度,演算法

線性查詢,肯定是以線性的方式,在集合或陣列中查詢某個元素。本篇包括 通過 來理解線性查詢 什麼叫 線性 還是在 中體會吧。首先需要乙個集合或陣列,如何得到呢?就生成乙個固定長度的隨機數組吧。然後輸入乙個查詢key,如果找到就返回元素的索引,沒找到就返回 1,就這麼簡單。class program所在...

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

時間複雜度無非就是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 二分查詢的時間複雜度是o log n 最壞情況...