這篇文章主要介紹JavaScript中二分查找法和計(jì)算重復(fù)次數(shù)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
在鄢陵等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站制作,鄢陵網(wǎng)站建設(shè)費(fèi)用合理。
具體如下:
javascript數(shù)據(jù)結(jié)構(gòu)與算法---檢索算法(二分查找法、計(jì)算重復(fù)次數(shù))
/*只需要查找元素是否存在數(shù)組,可以先將數(shù)組排序,再使用二分查找法*/ function qSort(arr){ if (arr.length == 0) { return []; } var left = [];//存儲小于基準(zhǔn)值 var right = [];//存儲大于基準(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ù)組的長度減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ù)會定位在類似值的附近。 *換句話說,其他相同的值可能會出現(xiàn)已找到值的左邊或右邊。 *如果在數(shù)據(jù)集中能找到這個(gè)值,那么這個(gè)函數(shù)將開始通過兩個(gè)循環(huán)來統(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));
使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼,可得如下運(yùn)行結(jié)果:
以上是“JavaScript中二分查找法和計(jì)算重復(fù)次數(shù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!