陣列高階二分查詢

2022-09-13 01:03:17 字數 1999 閱讀 8854

查詢:

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是所要查詢的資料)

1

import

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、 二分查詢法的注意事項:

注意:下面這種做法是有問題的。

因為陣列本身是無序的,所以這種情況下的查詢不能使用二分查詢。

雖然先排序了,但是排序的時候已經改變了最原始的元素索引。

所以以後遇到無序陣列,進行查詢的話,還是用基本查詢的方法

public

class

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進行比較,如...