中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中二分查找法和計算重復次數的示例分析

發布時間:2021-07-22 14:27:38 來源:億速云 閱讀:130 作者:小新 欄目:web開發

這篇文章主要介紹JavaScript中二分查找法和計算重復次數的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

具體如下:

javascript數據結構與算法---檢索算法(二分查找法、計算重復次數)

/*只需要查找元素是否存在數組,可以先將數組排序,再使用二分查找法*/
function qSort(arr){
  if (arr.length == 0) {
    return [];
  }
  var left = [];//存儲小于基準值
  var right = [];//存儲大于基準值
  var pivot = arr[0];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return qSort(left).concat(pivot, qSort(right));//遞歸
}
/*二分查找法,基本原理如下:
* 將數組的第一個位置設置為下邊界(0).將數組的最后一個元素所在的位置設置為上邊界(數組的長度減1)。
* 若下邊界等于或小于上邊界,則做如下操作:
*  (1).將中點設置為(上邊界加上下邊界) 除以2.
*  (2). 如果中點的元素小于查詢的值,則將下邊界設置為中點元素所在下標加1.
*  (3). 如果中點的元素大于查詢的值,則將上邊界設置為中點元素所在下標減1.
*  (4). 否則中點元素即為要查找 的數據,可以進行返回。*/
function binSearch(arr,data) {
  var lowerBound = 0;
  var upperBound = arr.length - 1;
  while(lowerBound <= upperBound) {
    var mid = Math.floor((upperBound + lowerBound)/2);
    if(arr[mid] < data) {
      lowerBound = mid + 1;
    }else if(arr[mid] > data) {
      upperBound = mid - 1;
    }else {
      return mid;
    }
  }
  return -1;
}
/*
*計算重復次數
*當binSearch()函數找到某個值時,如果在數據集中還有其他相同的值出現,那么該函數會定位在類似值的附近。
*換句話說,其他相同的值可能會出現已找到值的左邊或右邊。
*如果在數據集中能找到這個值,那么這個函數將開始通過兩個循環來統計這個值出現的次數。
*第一個循環向下遍歷數組,統計找到的值出現的次數,當下一個值與要查找的值不匹配時則停止計數。
*第二個循環向上遍歷數組,統計找到的值出現的次數,當下一個值與要查找的值不匹配時則停止計數。
* */
function count(arr, data) {
  var count = 0;
  var position = binSearch(arr, data);
  if (position > -1) {
    ++count;
    for (var i = position-1; i > 0; --i) {
      if (arr[i] == data) {
        ++count;
      }
      else {
        break;
      }
    }
    for (var i = position+1; i < arr.length; ++i) {
      if (arr[i] == data) {
        ++count;
      }
      else {
        break;
      }
    }
  }
  return count;
}
var nums = [90,43,49,15,23,2,70,23,20,95,69,23,29,26];
var list = qSort(nums);
console.log(list);
var findnum = 23;
console.log("需要查找的數據為: " + findnum);
var retVal = binSearch(list, findnum);
if (retVal >= 0) {
  console.log( "找到 " + findnum + "的位置為: "+retVal);
}else {
  console.log(" is not in array.");
}
console.log(findnum + "重復次數為"+count(list, findnum));

使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼,可得如下運行結果:

JavaScript中二分查找法和計算重復次數的示例分析

以上是“JavaScript中二分查找法和計算重復次數的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广河县| 台州市| 台前县| 云安县| 长春市| 西平县| 册亨县| 侯马市| 松原市| 静乐县| 东乡| 蓬溪县| 陆河县| 偃师市| 西城区| 临沧市| 东乡县| 弥勒县| 无极县| 宁阳县| 贺州市| 观塘区| 晋州市| 库伦旗| 清水河县| 衡山县| 耒阳市| 胶州市| 邹平县| 青阳县| 浦江县| 集安市| 永靖县| 镇巴县| 丰顺县| 会同县| 萍乡市| 崇礼县| 九龙城区| 竹溪县| 宣武区|