JS折半插入排序算法實(shí)例
本文實(shí)例講述了JS折半插入排序算法。分享給大家供大家參考,具體如下:
function pushArrayWithIndex(arr, index, value) { // 將元素添加到數(shù)組的指定位置
var temArr = arr.slice(0, index);
temArr.push(value);
return temArr.concat(arr.slice(index));
}
/* test for pushArrayWithIndex
var arr = [1, 2, 3, 4, 5];
arr = pushArrayWithIndex(arr, 1, 9);
console.log(arr);*/
function sortInsert(arr) { // 插入排序
var temArr = []; // 臨時(shí)數(shù)組,存儲(chǔ)已排序項(xiàng)
function getSortTmpIndex(subArr, num) {
var len = subArr.length;
if(0 == len) return 0; // 當(dāng)數(shù)組為空時(shí),返回最開(kāi)始位置
var cpmIndex = Math.ceil(len / 2); // 計(jì)算中間元素所在位置
if(cpmIndex > len - 1) cpmIndex = len - 1;
if(num == subArr[cpmIndex]) { // 相等時(shí)直接返回
return cpmIndex;
}
if(num > subArr[cpmIndex]) { // 向后折半查找
cpmIndex++;
return cpmIndex + getSortTmpIndex(subArr.slice(cpmIndex), num);
}
if(num < subArr[cpmIndex]) { // 向前折半查找
return getSortTmpIndex(subArr.slice(0, cpmIndex), num);
}
}
for (var i in arr) {
var index = getSortTmpIndex(temArr, arr[i]); // 查找arr[i]在temArr中的位置
console.log('index:', index, ' num:', arr[i], ' arr:', temArr);
temArr = pushArrayWithIndex(temArr, index, arr[i]); // 將元素插入到查找位置
}
return temArr;
}
var arr = [3, 7, 6, 5, 9, 1, 2, 3, 1, 7, 4];
console.log(arr);
arr = sortInsert(arr);
console.log(arr);
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JS實(shí)現(xiàn)冒泡排序,插入排序和快速排序并排序輸出
- js排序動(dòng)畫模擬-插入排序
- javascript算法學(xué)習(xí)(直接插入排序)
- javascript數(shù)據(jù)結(jié)構(gòu)之雙鏈表插入排序?qū)嵗斀?/a>
- JavaScript插入排序算法原理與實(shí)現(xiàn)方法示例
- JavaScript實(shí)現(xiàn)經(jīng)典排序算法之插入排序
- JS排序算法之冒泡排序,選擇排序與插入排序?qū)嵗治?/a>
- JavaScript實(shí)現(xiàn)鏈表插入排序和鏈表歸并排序
- JS實(shí)現(xiàn)的冒泡排序,快速排序,插入排序算法示例
- 基于JavaScript實(shí)現(xiàn)的插入排序算法分析
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之基本排序算法定義與效率比較【冒泡、選擇、插入排序】
- JS插入排序簡(jiǎn)單理解與實(shí)現(xiàn)方法分析
相關(guān)文章
js下拉菜單語(yǔ)言選項(xiàng)簡(jiǎn)單實(shí)現(xiàn)
大家對(duì)下拉菜單并不陌生吧,下面為大家介紹下使用js實(shí)現(xiàn)下拉菜單語(yǔ)言選項(xiàng),具體實(shí)現(xiàn)如下,喜歡的朋友可以看看2013-09-09
javascript常用方法、屬性集合及NodeList 和 HTMLCollection 的瀏覽器差異
對(duì)于 HTMLCollection集合對(duì)象 必須要說(shuō)一說(shuō)的是 namedItem方法. 看看規(guī)范的解釋.2010-12-12
JavaScript進(jìn)階教程之非extends的組合繼承詳解
組合繼承有時(shí)候也叫偽經(jīng)典繼承,指的是將原型鏈和借用構(gòu)造函數(shù)技術(shù)組合到一塊,從而發(fā)揮二者之長(zhǎng)的一種繼承模式,下面這篇文章主要給大家介紹了關(guān)于JavaScript進(jìn)階教程之非extends的組合繼承的相關(guān)資料,需要的朋友可以參考下2022-08-08
javascript支持IE和firefox(FF)的漸變透明效果
DataThis可以發(fā)送任何標(biāo)簽,這個(gè)標(biāo)簽沒(méi)有ID也可以,因?yàn)橛玫氖亲远x屬性。2008-10-10
微信小程序van-field中的left-icon屬性自定義實(shí)現(xiàn)過(guò)程
在小程序中,我們是用 Vant 組件庫(kù)時(shí),常常會(huì)用到 van-field 輸入框控件,今天我將跟大家分享的是 van-field 輸入框控件中的 left-icon 屬性的自定義怎么實(shí)現(xiàn),感興趣的朋友一起看看吧2023-08-08
如何利用js實(shí)時(shí)監(jiān)聽(tīng)input輸入框值的變化
在做web開(kāi)發(fā)時(shí)候很多時(shí)候都需要即時(shí)監(jiān)聽(tīng)輸入框值的變化,以便作出即時(shí)動(dòng)作去引導(dǎo)瀏覽者增強(qiáng)網(wǎng)站的用戶體驗(yàn)感,這篇文章主要給大家介紹了關(guān)于如何利用js實(shí)時(shí)監(jiān)聽(tīng)input輸入框值的變化,需要的朋友可以參考下2024-02-02
JavaScript中對(duì)象property的刪除方法介紹
這篇文章主要介紹了JavaScript中對(duì)象property的刪除方法介紹,本文主要是對(duì)delete操作符的介紹,需要的朋友可以參考下2014-12-12

