/**
* * @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 最壞情況...