国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > JS > 正文

JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之檢索算法示例【二分查找法、計(jì)算重復(fù)次數(shù)】

2024-05-06 16:48:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之檢索算法。分享給大家供大家參考,具體如下:

javascript數(shù)據(jù)結(jié)構(gòu)與算法---檢索算法(二分查找法、計(jì)算重復(fù)次數(shù))

/*只需要查找元素是否存在數(shù)組,可以先將數(shù)組排序,再使用二分查找法*/function qSort(arr){  if (arr.length == 0) {    return [];  }  var left = [];//存儲(chǔ)小于基準(zhǔn)值  var right = [];//存儲(chǔ)大于基準(zhǔn)值  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));//遞歸}/*二分查找法,基本原理如下:* 將數(shù)組的第一個(gè)位置設(shè)置為下邊界(0).將數(shù)組的最后一個(gè)元素所在的位置設(shè)置為上邊界(數(shù)組的長(zhǎng)度減1)。* 若下邊界等于或小于上邊界,則做如下操作:*  (1).將中點(diǎn)設(shè)置為(上邊界加上下邊界) 除以2.*  (2). 如果中點(diǎn)的元素小于查詢的值,則將下邊界設(shè)置為中點(diǎn)元素所在下標(biāo)加1.*  (3). 如果中點(diǎn)的元素大于查詢的值,則將上邊界設(shè)置為中點(diǎn)元素所在下標(biāo)減1.*  (4). 否則中點(diǎn)元素即為要查找 的數(shù)據(jù),可以進(jìn)行返回。*/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;}/**計(jì)算重復(fù)次數(shù)*當(dāng)binSearch()函數(shù)找到某個(gè)值時(shí),如果在數(shù)據(jù)集中還有其他相同的值出現(xiàn),那么該函數(shù)會(huì)定位在類(lèi)似值的附近。*換句話說(shuō),其他相同的值可能會(huì)出現(xiàn)已找到值的左邊或右邊。*如果在數(shù)據(jù)集中能找到這個(gè)值,那么這個(gè)函數(shù)將開(kāi)始通過(guò)兩個(gè)循環(huán)來(lái)統(tǒng)計(jì)這個(gè)值出現(xiàn)的次數(shù)。*第一個(gè)循環(huán)向下遍歷數(shù)組,統(tǒng)計(jì)找到的值出現(xiàn)的次數(shù),當(dāng)下一個(gè)值與要查找的值不匹配時(shí)則停止計(jì)數(shù)。*第二個(gè)循環(huán)向上遍歷數(shù)組,統(tǒng)計(jì)找到的值出現(xiàn)的次數(shù),當(dāng)下一個(gè)值與要查找的值不匹配時(shí)則停止計(jì)數(shù)。* */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("需要查找的數(shù)據(jù)為: " + findnum);var retVal = binSearch(list, findnum);if (retVal >= 0) {  console.log( "找到 " + findnum + "的位置為: "+retVal);}else {  console.log(" is not in array.");}console.log(findnum + "重復(fù)次數(shù)為"+count(list, findnum));

可得如下運(yùn)行結(jié)果:

JavaScript,數(shù)據(jù)結(jié)構(gòu),算法,檢索算法

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 札达县| 沐川县| 丽江市| 九寨沟县| 长岛县| 义乌市| 大埔县| 广东省| 西青区| 海口市| 绥江县| 伽师县| 卢龙县| 崇阳县| 新乡市| 株洲市| 昌乐县| 沽源县| 清丰县| 博野县| 秭归县| 拜城县| 济源市| 玛曲县| 拉萨市| 灌南县| 城口县| 萝北县| 潜山县| 古丈县| 溧阳市| 南宁市| 云和县| 安达市| 体育| 临澧县| 扶风县| 邵阳市| 从江县| 荃湾区| 静安区|