记录二分法

二分法

二分查找是一种高效搜索法,是一种可以在有序数组中搜索到特定元素的算法

优缺点

  • 优:比较次数少,查找速度快,平均性能好,
  • 缺: 要求待查表为有序表,且插入删除困难,
 const arr = [2, 1, 3, 5, 6, 4, 7];

 function bubbleSort(arr) {
   if (!arr.length) return arr;
   const copyArr = arr.slice();
   for (let i = 0, length = copyArr.length; i < length; i++) {
     for (let j = 0; j < length - i - 1; j++) {
       const current = copyArr[j];
       const next = copyArr[j + 1];
       if (current > next) [copyArr[j], copyArr[j + 1]] = [next, current]
     }
   }
   return copyArr;
 }
 
 const sortArr = bubbleSort(arr);

// 递归
 function binarySearch(arr, num, low = 0, height = arr.length || 0) {
   const midIndex = Math.floor((low + height) / 2)
   const midNum = arr[midIndex];
   if (midNum === num) return [midIndex, midNum];
   if (midNum > num) {
     height = midIndex - 1;
     return binarySearch(arr, num, low, height);
   }
   if (midNum < num) {
     low = midIndex + 1;
     return binarySearch(arr, num, low, height);
   }
 }
 
 // while
 function binarySearch1(arr, num) {
   let start = 0, end = arr.length, midNum, midIndex;

   while (start <= end) {
     midIndex = Math.floor((start + end) / 2);
     midNum = arr[midIndex];
     if (midNum === num) return {midNum, midIndex}
     if (midNum > num) end = midIndex - 1;
     else if (midNum < num) start = midIndex + 1
   }
 }

 binarySearch1(sortArr, 3)