package com.db2; import java.util.Arrays; /** * 二分法查找 * * @author denny 使用二分法查找的前提數組已經排過序 * */ public class Demo4 { public static void main(String[] args) { int[] arr = { 3, 1, 8, 2, 9, 100, 33, 22, 11, 18, 14, 17, 15, 3 }; // 使用Arrays.sort()排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 返回結果 //int index = brinarySearch(arr, 99); int index = brinarySearch_2(arr, 11); System.out.println("index=" + index); } /* * 二分法查找一返回下標如果是-1就說明沒有 */ public static int brinarySearch(int[] arr, int key) {// 數組和要查找的數 int min = 0; // 最小的下標 int max = arr.length - 1;// 最大的下標 int mid = (min + max) / 2;// 中間的下標 while (arr[mid] != key) { if (key > arr[mid]) { //比中間數還在 min = mid + 1; //最小的下標=中間下標加一 } else if (key < arr[mid]) {//比中間數還小 max = mid - 1; //最大的下標=中間下標-1 } if(max<min){ return -1; } mid=(min+max)/2; //再次計算中間下標 } return mid; } /* * 二分法查找一返回下標如果是-1就說明沒有 */ public static int brinarySearch_2(int[] arr, int key) {// 數組和要查找的數 int min = 0; // 最小的下標 int max = arr.length - 1;// 最大的下標 int mid = (min + max) / 2;// 中間的下標 while(min<=max){ if(key>arr[mid]){ min=mid+1; }else if(key<arr[mid]){ max=mid-1; }else{ return mid; } mid=(min+max)/2; } //沒找到 return -1; } }