算法篇-折半查找

156 阅读1分钟

折半查找

也叫二分查找。是在特定的有序列表中查找指定的值。返回改值在数组中的索引。方法:

  1. 从数组的中间元素查找该值,如果该值大于或小于中间元素,则在数组大于或小于的那块区域查找;
  2. 如果该元素恰好等于该值,则返回;
  3. 重复以上过程,直到找到目标元素的索引,查找成功;或者直到子数组为空,查找失败。 特点:必须为有序列表。 优点是比较次数少,查找速度快,平均性能好。

递归查找

 let arr = [2, 5, 6, 7, 8, 9, 10, 15];
   function mySearch(arr, low, high, key) {
      let mid = parseInt((high + low) / 2);
      console.log('arrSort', mid)
      if (key < arr[mid]) {
         high = mid - 1;
         return mySearch(arr, low, high, key)
      } else if (key > arr[mid]) {
         low = mid + 1
         return mySearch(arr, low, high, key)
      } else {
         return mid;
      }
   }
   console.log('mySearch', mySearch(arr, 0, 8, 10))

while查找

  let arr = [2, 5, 6, 7, 8, 9, 10, 15];
  let key = 5;
  function mySearch(arrSort) {
      var low = 0;
      let high = arrSort.length - 1;
      while (low <= high) {
         let mid = parseInt((high + low) / 2);
         if (key > arrSort[mid]) {
            low = mid + 1
         } else if (key < arrSort[mid]) {
            high = mid - 1
         }
         else if (key == arrSort[mid]) {
            return mid;
         }
      }

   }
   console.log('mySearch', mySearch(arrSort))