1. 程式人生 > >數組-折半查找

數組-折半查找

gpo min pan 查找 arr turn spa ret 左移

//折半查找
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 }

數組-折半查找