《Algorithms Unlocked》是 《算法導(dǎo)論》的合著者之一 Thomas H. Cormen 寫(xiě)的一本算法基礎(chǔ),算是啃CLRS前的開(kāi)胃菜和輔助教材。如果CLRS的厚度讓人望而生畏,這本200多頁(yè)的小讀本剛好合適帶你入門。

書(shū)中沒(méi)有涉及編程語(yǔ)言,直接用文字描述算法,我用 JavaScript 對(duì)書(shū)中的算法進(jìn)行描述。

二分查找

在排好序的數(shù)組中查找目標(biāo)值x。在p到r區(qū)間中,總是取索引為q的中間值與x進(jìn)行比較,如果array[q]大于x,則比較p到q-1區(qū)間,否則比較q+1到r區(qū)間,直到array[q]等于x或p>r。

// 利用二分法在已經(jīng)排好序的數(shù)組中查找值xfunction binarySearch(array, x) {
  let p = 1;
  let r = array.length - 1;

  while (p <= r) {
    let q = Math.round((p + r) / 2);  //四舍五入取整

    if (array[q] === x) {
      return q;
    } else {
      if (array[q] > x) {
        // 如果q沒(méi)有減一,遇到找不到x的情況,
        // 就會(huì)陷入while循環(huán)中出不來(lái),因?yàn)閜會(huì)一直等于r
        r = q - 1; 
      } else {
        p = q + 1;
      }
    }
  }

  return 'NOT-FOUND';}

網(wǎng)友評(píng)論