Java二分查詢演算法實現程式碼例項
阿新 • • 發佈:2020-01-07
這篇文章主要介紹了Java二分查詢演算法實現程式碼例項,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
二分查詢:
兩種方式: 非遞迴方式和遞迴方式
主要思路: 對於已排序的陣列(先假定是從小到大排序),先定義兩個"指標",一個"指向"首元素low,一個"指向"末尾元素high. 然後,開始折半比較,即讓要查詢的數與陣列中間的元素(索引為 low+high/2)比較. 若要查詢的數比中間數小,說明要查詢的數在陣列左側(注意前提是陣列從小到大排序),否則說明該數在陣列的右側. 如果low最後還比high大,倆"指標"交叉了,說明沒有找到該數,即陣列不存在該數.
注意事項: 排序規則與陣列的排序順序有關,即從大到小排序和從小到大排序是不一樣的!!!
程式碼如下
class BinarySearch { // 二分查詢非遞迴方式 // arr 給定已排序陣列 // num 要查詢的數 public static int search(int[] arr,int num) { int low = 0; int high = arr.length - 1; int mid = 0; while (low <= high) { mid = (low + high) / 2; if (num < arr[mid]) { high = mid - 1; } if (num > arr[mid]) { low = mid + 1; } if (num == arr[mid]) { return mid; } } return -1; // 沒找到 } // 二分查詢遞迴方式 // arr 給定已排序陣列 // num 要查詢的數 // low 初始左側指標 指向第一個元素 // high 初始末尾指標 指向最後一個元素 public static int binarySearch(int[] arr,int num,int low,int high) { int mid = (low + high) / 2; // 遞迴結束條件 if (low > high) { return -1; } if (num < arr[mid]) { return binarySearch(arr,num,low,mid - 1); } else if (num == arr[mid]) { return mid; } else { return binarySearch(arr,mid + 1,high); } } public static void main(String[] args) { // 給定陣列 從小到大排序. int[] arr = {2,3,5,7,8,9,11,12,15}; // int[] arr = {15,2}; int m = 3; // int index = search(arr,m); int index = binarySearch(arr,m,arr.length - 1); System.out.println(index); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。