數據結構java版之大O表示法

大O表示法使用大寫字母O,可以認爲其含義爲"order of"(大約是)。我們可以使用大O法來描述線性查找使用了O(N)級時間,二分查找使用了O(log N)級時間,向一個無序數組中插入使用了O(1),或常數級時間。
下面的圖總結了算法的運行時間:
圖片描述

通過圖我們可以比較不同的大O值,O(1)是優秀,O(logN)是良好,O(N)是還可以,O(N^2)則很差了,比如冒泡排序。
下面我們通過例子來看一下二分查找法。就是我們玩過的遊戲猜數字,設定一個數組大小,一個人心裏想一個數,讓另外一個人來猜。每次告訴他猜大了還是小了,直到猜中爲止。看花了多少步。

/**
* 二分查找法
* @param search 要查找的數
* @param total 數組長度
*/
public void compute(int search,int total){
//設定的數組
int[] num;
if(total > 0 && search <= total && search >= 0){
num = new int[total];
for (int i = 0 ; i < total; i++){
num[i] = i;
}
//花了多少次找到
int sum = 0;
//最小值
int min = 0 ;
//最大值
int max = total;
//當前猜的值
int current;
while (true){
sum ++ ;
current = (min + max) / 2;
//打印猜的每個數
System.out.println(current);
if(num[current] == search){
System.out.println("找到了,花了" + sum + "次");
return;
}else{
//如果猜的數大於選定的數,則把max設爲猜的數,否則把min設爲猜的數
if(num[current] > search){
max = num[current] ;
}else{
min = num[current];
}
}

}
}else {
System.out.println("請輸入大於等於0的正整數且查找的數不能大於數組裏最大的數");
}
}

調用方法:

compute(3,100)
執行結果:

50
25
12
6
3
找到了,花了5次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章