//折半查找 public int halfFind(int[] arr,int key) { int min = 0; //數組第一個下標 int max = arr.length -1; //數組最大下標 int mid = ( min + max ) / 2; //數組中間下標 //如果中間值... ...
//折半查找 public int halfFind(int[] arr,int key) { int min = 0; //數組第一個下標 int max = arr.length -1; //數組最大下標 int mid = ( min + max ) / 2; //數組中間下標 //如果中間值不等於要找的值,繼續折半 while(arr[mid] != key){ //如果中間值大於查找值,說明key在左邊,所以最大下標左移 if(arr[mid] > key) { max = mid - 1; }else if(arr[mid] < key)//同理,在左邊,最小下標右移 { min = mid + 1; } //如果最小下標大於最大下標,說明沒有key if(min > max) { //沒找到 return -1; } //根據最大最小下標值重新確定中間下標 mid = (min + max) / 2; } //輸出key值所在位置 return mid; } //折半2 public int halfFind(int[] arr, int key) { int min = 0;//數組第一個下標 int max = arr.length -1;//數組最大下標 int mid;//數組中間下標 while(min <= max) { mid = (max + min) / 2; //mid = (max + min) >> 1; 右移效果一樣 if(key > arr[mid]) { min = mid + 1; }else if(key < arr[mid]) { max = mid - 1; }else{ return mid;//key所在下標 } } return -1;// 不存在key }