merge sort

本文介绍了一种高效的排序算法——合并排序的原理及其JavaScript实现。采用分而治之的策略,将数组分解为最小单元再逐步合并,确保每次合并后的数组有序。文中还提供了具体的JS代码示例。
[b]merge sort[/b]

合并排序

------
[b]merge sort 原理 [/b]

采用 divide-and-conqure,即 分而治之,

将问题分成最小的单元,然后从最小的解决,再不断合并,合并中继续解决,直到完成,

------
[b]例子:[/b]

* js 代码

var arr_merge= [ 78, 13, 6, 177, 26, 90, 288, 45, 62 ];

/**
* merge sort (合并排序),时间: o(n*lg(n)),内存: n,
*
* @param inputArr
* @return
*/
function mergeSort(inputArr) {
/**
* 将1组数组 合并1次,数量大概减半
*
* @param arrs
* @return
*/
function mergeArrOnce(arrs) {
var len = Math.ceil(arrs.length / 2);
var arrNew = new Array(len);
for ( var i = 0; i < arrNew.length; i++) {
if (i * 2 == arrs.length - 1) { // 最后1次 仅有1个数组
arrNew[i] = mergeTwoArr(arrs[i * 2]);
} else {
arrNew[i] = mergeTwoArr(arrs[i * 2], arrs[i * 2 + 1]);
}
}
return arrNew;
}
/**
* 按元素大小,合并2个数组
*/
function mergeTwoArr(arrOne, arrTwo) {
if (typeof(arrOne)=='number' && typeof(arrTwo)=='number') { // 排序2个数字,生成1个数组
if (arrOne < arrTwo) {
return new Array(arrOne, arrTwo);
} else {
return new Array(arrTwo, arrOne);
}
} else if (typeof(arrOne)=='number' && arrTwo == undefined) { // 仅1个数字
return [arrOne];
} else if (arrTwo == undefined) { // 如果仅有1个数组,则直接返回
return arrOne;
} else {// 2个都是数组
var len = arrOne.length + arrTwo.length;
var arrNew = new Array(len);
var indexOne = 0, indexTwo = 0;
for ( var i = 0; i < len; i++) {
if (arrOne[indexOne] < arrTwo[indexTwo]) {
arrNew[i] = arrOne[indexOne++];
} else {
arrNew[i] = arrTwo[indexTwo++];
}
if (indexOne==arrOne.length) { // arrOne 结束了,(最近一次添加的是 arrOne)
return arrNew.slice(0,i+1).concat(arrTwo.slice(indexTwo,arrTwo.length));
} else if (indexTwo==arrTwo.length) { // arrTwo 结束了,(最近一次添加的是 arrTwo)
return arrNew.slice(0,i+1).concat(arrOne.slice(indexOne,arrOne.length));
}
}
return arrNew;
}
}
while(inputArr.length>1) {
inputArr = mergeArrOnce(inputArr);
}
return inputArr;
}


* html 代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/merge_sort.js"></script>
</head>
<body>
<input type="button" value="merge sort" onclick="alert(mergeSort(arr_merge));" />
</body>
</html>


------
【路径规划】(螺旋)基于A星全覆盖路径规划研究(Matlab代码实现)内容概要:本文围绕“基于A星算法的全覆盖路径规划”展开研究,重点介绍了一种结合螺旋搜索策略的A星算法在栅格地图中的路径规划实现方法,并提供了完整的Matlab代码实现。该方法旨在解决移动机器人或无人机在未知或部分已知环境中实现高效、无遗漏的区域全覆盖路径规划问题。文中详细阐述了A星算法的基本原理、启发式函数设计、开放集与关闭集管理机制,并融合螺旋遍历策略以提升初始探索效率,确保覆盖完整性。同时,文档提及该研究属于一系列路径规划技术的一部分,涵盖多种智能优化算法与其他路径规划方法的融合应用。; 适合人群:具备一定Matlab编程基础,从事机器人、自动化、智能控制及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于服务机器人、农业无人机、扫地机器人等需要完成区域全覆盖任务的设备路径设计;②用于学习和理解A星算法在实际路径规划中的扩展应用,特别是如何结合特定搜索策略(如螺旋)提升算法性能;③作为科研复现与算法对比实验的基础代码参考。; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注A星算法与螺旋策略的切换逻辑与条件判断,并可通过修改地图环境、障碍物分布等方式进行仿真实验,进一步掌握算法适应性与优化方向。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值