算法图解学习笔记

51 阅读1分钟

二分法查找

对于包含n个元素的列表,用二分法查找需要log2n步骤

仅当列表有序时,二分法才生效

非递归版本

const binarySearch = (word, arr) => {

      let start = 0, last = arr.length - 1;
      
      while(start <= last) {
          let mid = Math.floor((start + last) / 2) 
          let temp = arr [mid]
          if(temp === word) {
              return mid
          }else if(temp > word ){
             last = mid - 1
          }else {
              start = mid + 1
          }
      }
  
      return -1
  
  }
  
  const numberList = [1,2,3,4,5]
  console.log('>>>>>', binarySearch(3, numberList))

递归版本

const binarySearch = (word, arr) => {
      let start = 0, last = arr.length - 1;
      let mid = -1

      const  df = (first, end) => {
        if(first > end) {
          mid = -1
          return mid
        }

        mid = Math.floor((first + end) / 2) 

        if(arr[mid] === word) {
          return mid
        }else if(arr[mid] > word) {
           df(first, mid-1)
        }else if(arr[mid] < word) {
           df(mid + 1, end)
        }
      }

      df(start, last)  

      return mid
  }

快速排序法

const quickSort = (arr) => {
      if(arr.length <= 1 ) return arr
  
      let left = [], right = [], start = arr[0];
  
      for (let i = 1; i < arr.length; i++) {
          if(arr[i] > start) {
              right.push(arr[i])
          }else {
              left.push(arr[i])
          }
      }
  
      return [...quickSort(left),  start, ...quickSort(right)]
      
  }
  
  console.log(quickSort([3,4,5,3,2,1,56]))