[算法学习]合并两个有序列表

这次的算法是将两个各自按升序排列的数组a和b合并成一个数组m,并且将m也按升序排列
其基本原理是 先定义2个计数器 ai=0, bi=0 然后比较a[ai]和b[bi]如果a[ai]<=b[bi]那么就将a[ai]添加到数组m,计数器ai加1,否则将b[bi]添加到数组m
当计数器ai或bi达到对应数组的长度值时循环结束,接着将另一个数组中剩下的元素添加到数组m中
下面看下as代码吧... 请多指教啊,呵呵

[as]
/**
* 合并2个有序(升序)数组并且也按升序排列
*/
function mergeAry(a:Array, b:Array):Array
{
var aryM:Array = [];
var k :Number = 0;
var ai :Number = 0;
var bi :Number = 0;
var ae :Number = a.length-1;
var be :Number = b.length-1;

while(ai<=ae && bi<=be)
{
if(a[ai] <= b[bi]) {
aryM[k] = a[ai];
ai++;
} else {
aryM[k] = b[bi];
bi++;
}
k++
}
if(ai==ae+1) {
for(var i:Number=bi; i<=be; i++)
aryM.push(b[i]);
} else {
for(var i:Number=ai; i<=ae; i++)
aryM.push(a[i]);
}

return aryM;
}

///////////////main
var aryA:Array = [1,56,89,90,103,110];
var aryB:Array = [5,20,55,89,103,222,230,300,500];
trace(mergeAry(aryA, aryB));
// output:
// 1,5,20,55,56,89,89,90,103,103,110,222,230,300,500
[/as]

评论