Java實現二分查詢

2021-09-16 12:04:59 字數 1621 閱讀 5267

二分查詢演算法思想非常簡單,就是折半查詢乙個有序序列,直到找到目標數。其主要思想是:

二分查詢演算法的前置條件是,乙個已經排序好的序列,假設這個序列是公升序排列的,這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止.

1.如何查詢?

對於陣列來說,我們通常用整形儲存其下標。如果我們將所有**實現在mian()函式中,則left的下標為0,right的下標為arr.length/arr[0].length-1.(因為陣列的下標是由0開始)而中間數mid = left+(right-left)/2;(考慮溢位)或者mid = left+((right-left)>>1)

2.查詢步驟:

1>如果(arr[middle] > searchnumber),那麼第二次查詢則在左邊再進行二分查詢,即將right的下標移到middle-1(因為middle如果是目標數searchnumber的話,會直接返回找到了,如果不是,那麼將其下標直接移向middle-1的位置,這樣會減少查詢的次數)的位置。

2>.如果(arr[middle] 3>除了這兩種情況外,則就是(arr[middle] = searchnumber),說明目標數searchnumber找到了。

4>以上三個步驟是在while()迴圈中實現。

3.定義返回值含義(二分查詢函式中的返回值):

在迴圈中,(arr[middle] = searchnumber)的時候return middle,即找到了searchnumber並且返回其下標。

public static void main(string args) ;

arrays.sort(arr);

system.out.println(arrays.tostring(arr));

system.out.println("請輸入要查詢的數字: ");

int searchnumber = scan.nextint();

int i = search(searchnumber, arr);

system.out.println(searchnumber + "的下標為: " + i);

system.out.println("是否繼續查詢? 1.是 2.否");

int judge = scan.nextint();

judge(judge);}}

public static int search(int searchnumber,int arr) else

s = middle;

middle = (l + s + 1) / 2;

}return middle;

}public static void judge(int judge)

else

system.exit(-1);

}

執行結果如圖:

JAVA實現二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...

Java 實現二分查詢

二分查詢 又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。時間複雜度o h o log2n 演算法思想 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等...

Java實現二分查詢

二分查詢是一種高效的查詢演算法,其基本思想是,在乙個有序的陣列中,先和陣列最中間的值進行比較,如果小於最中間的這個值,則將查詢範圍縮小為左半部分,大於則將查詢範圍縮小為右半部分,每次縮小一半的查詢範圍,直至找到與這個數相等的數。當資料量比較大的時候,二分查詢相對於順序查詢,顯示出明顯的優勢。下圖為二...