JavaScript折半插入排序算法实现详解
作者:拾光时间:2026-10-29 18:21:36浏览:276
本文介绍JavaScript中折半插入排序算法的实现方法。通过二分查找确定插入位置,结合数组切片与拼接操作完成元素插入,从而优化传统插入排序的比较次数。
JavaScript折半插入排序算法实现详解
本文通过具体示例展示JavaScript中折半插入排序算法的实现过程,供读者参考学习。
function pushArrayWithIndex(arr, index, value) { // 将元素添加到数组的指定位置
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 = []; // 临时数组,存储已排序项
function getSortTmpIndex(subArr, num) {
var len = subArr.length;
if(0 == len) return 0; // 当数组为空时,返回最开始位置
var cpmIndex = Math.ceil(len / 2); // 计算中间元素所在位置
if(cpmIndex > len - 1) cpmIndex = len - 1;
if(num == subArr[cpmIndex]) { // 相等时直接返回
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);
希望本文提供的JavaScript程序设计内容能对大家有所帮助。
作者最新文章
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
