二分查詢演算法思想非常簡單,就是折半查詢乙個有序序列,直到找到目標數。其主要思想是:
二分查詢演算法的前置條件是,乙個已經排序好的序列,假設這個序列是公升序排列的,這樣在查詢所要查詢的元素時,首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止.
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實現二分查詢
二分查詢是一種高效的查詢演算法,其基本思想是,在乙個有序的陣列中,先和陣列最中間的值進行比較,如果小於最中間的這個值,則將查詢範圍縮小為左半部分,大於則將查詢範圍縮小為右半部分,每次縮小一半的查詢範圍,直至找到與這個數相等的數。當資料量比較大的時候,二分查詢相對於順序查詢,顯示出明顯的優勢。下圖為二...