二分法查找

二分法查找原理

使用二分法查找時需要以下兩個條件:

沒有重復元素

已經排好順序

假設給定一組排好序且沒有重復元素的數(shù)字,要從這些數(shù)字中快速找到x所在的位置,可以從這組數(shù)字的中間位置開始找,如果當前值與x相等,則查找成功,如果小于x則從后半段的中間位置繼續(xù)找,如果大于x則從前半段的中間位置繼續(xù)尋找,直到找到x所在的位置

例如一個數(shù)組里面的元素有:1,5,8,15,18,23,30

快速找到23對應的下標值

第一次:取得數(shù)組的中間位置的值15,15小于23,所以繼續(xù)從后半段開始找,后半段的元素是18,23,30

第二次:取得數(shù)組后半段元素中間位置的值23,23等于23,即找到23對應的下標值5


代碼實現(xiàn)

public class MyArrays{

? ? publicstaticvoidmain(String[] args){

? ? ? ? int[] a = {1,5,8,15,18,23,30};

? ? ? ? int destElement = 23;

? ? ? ? //要求從a數(shù)組中查找23這個元素的下標? ? ? ? int index = binarySearch(a,destElement);

? ? ? ? //如果找到則返回元素的下標,如果找不到統(tǒng)一返回 -1? ? ? ? System.out.println((index==-1)? destElement + "元素不存在!":destElement + "在數(shù)組中的下標是:" + index);

? ? }

? ? //二分法查找的核心算法? ? publicstaticintbinarySearch(int[] a,intdestElement){

? ? ? ? int begin = 0;

? ? ? ? int end = a.length-1;

? ? ? ? while(begin <= end){

? ? ? ? ? ? int middle = (begin + end)/2;? ?

? ? ? ? ? ? if(a[middle]==destElement){

? ? ? ? ? ? ? ? return middle;

? ? ? ? ? ? }elseif(a[middle]>destElement){

? ? ? ? ? ? ? ? end = middle - 1;

? ? ? ? ? ? }elseif(a[middle] < destElement){

? ? ? ? ? ? ? ? begin = middle + 1;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return -1;

? ? }

}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容