查詢:
1、基本查詢:陣列元素無序(從頭找到尾)
2、二分查詢(折半查詢):陣列元素有序 ps:陣列的元素必須有順序,從小到大或者從大到小。以下的分析是從小到大的陣列
二分查詢分析:
a:先對陣列進行對半(也就是設定 min索引為0,max索引為arr.length-1,然後對半的 索引mid為(min+max)/2)
b:把所需要查詢的資料x跟arr[mid]進行對比
a:兩者的值相等,就返回mid索引
b:兩者不等:
1、如果 x > arr[mid],則 min索引的值改變為:min = mid+1,然後 mid 要重新賦值 :(min+max)/2
2、如果 x < arr[mid],則 max索引的值改變為:max = mid-1,然後 mid 要重新賦值 :(min+max)/2
c:重複b的動作
d:注意:為了避免查詢乙個不存在的資料時,會出現死迴圈,所以要在b中加入乙個限制條件:
if(min > max)
e:以上定義為方法:
a:返回型別:int(因為要的是所查詢資料的索引)
b:引數列表:int arr(所查詢的陣列)和 int x(x是所要查詢的資料)
1import
j**a.util.scanner;
2public
class
arraydemo1;7//
建立鍵盤輸入
8 scanner sc = new
scanner(system.in);
9 system.out.println("請輸入想要查詢的資料:");
10int x =sc.nextint();
1112
//呼叫方法
13int index =choose(arr,x);
14 system.out.println("你所查詢的資料的索引是:"+index);15}
1617
//定義二分查詢的方法
18public
static
int choose(int arr,int
x) 32
//2、如果 x < arr[mid]
33else
if( x 36//
加入判斷,防止死迴圈
37if( min >max)
40//
不管上面哪種情況,mid都要進行重新賦值的
41 mid = (min + max )/2; 42}
43//
如果 x = arr[mid],就返回mid
44return
mid;45}
4647 }
2、 二分查詢法的注意事項:
注意:下面這種做法是有問題的。
因為陣列本身是無序的,所以這種情況下的查詢不能使用二分查詢。
雖然先排序了,但是排序的時候已經改變了最原始的元素索引。
所以以後遇到無序陣列,進行查詢的話,還是用基本查詢的方法
publicclass
arraydemo2 ;
//先排序
bubblesort(arr);
//後查詢
int index = getindex(arr, 80);
system.out.println("index:" +index);}//
氣泡排序**
public
static
void bubblesort(int
arr) }}
}//二分查詢
public
static
int getindex(int arr, int
value)
else
if (arr[mid] //加入判斷
if (min >max)
mid = (max + min) / 2;
}return
mid;
}}
陣列 二分查詢
package a array.a twopointssearch 二分查詢,增刪。優點 查詢速度比無序陣列快 缺點 刪除慢,因為資料項必須向前移動來填補已刪除資料項的洞 增加慢,需要移動大於增加數所對用索引後面的所有值 author administrator author administrat...
高階 検索 (二分查詢)
題目描述 輸入兩個數n和q,分別表示n個正整數和q次查詢 每次查詢乙個數字x,輸出有多少數比x小,有多少個數比x大.輸入格式 第一行輸入 n和q 整數 第二行輸入 n個正整數 第三行輸入 q個正整數 輸出格式 q行 每行兩個整數 為小於 大於的數 樣例輸入 10 2 2 8 3 4 1 9 2 7 ...
陣列 二分查詢演算法
二分查詢演算法 二分查詢演算法也稱為折半查詢法,它的思想是每次都與序列的中間元素比較。二分查詢的乙個前提條件是陣列是有序的,假設陣列array為遞增序列,finddata為要查詢的數,n為陣列長度,首先將n個元素分成個數大致相同的兩半,取array n 2 與將要查詢的值finddata進行比較,如...