最近在做游戏时,要用到这个,在网上查阅了相关资源,并用AS代码实现的,已经测试过了。和大家分享。
public function MergeSort(arr:Array)
{
var arrTemp:Array=new Array();
if (arrTemp == null||arr == null)
{
return false;
}
else
{
DivideSort(arr, 0, arr.length-1, arrTemp);
arrTemp = null;
return arr;
}
}
public function MergeOrderedArray(arrA:Array, fst:int, mid:int,lst:int,arrTemp:Array)
{
//功能:将有二个有序数列arrA[first...mid]和arrA[mid...last]合并
var i,j,m,n,k:int;
i = fst,j = mid + 1;
m = mid,n = lst;
k = 0;
while (i<=m&&j<=n)
{
if (arrA[i] <= arrA[j])
{
arrTemp[k++] = arrA[i++];
}
else
{
arrTemp[k++] = arrA[j++];
}
}
while (i<=m)
{
arrTemp[k++] = arrA[i++];
}
while (j<=n)
{
arrTemp[k++] = arrA[j++];
}
for (i = 0; i < k; i++)
{
arrA[fst + i] = arrTemp[i];
}
}
public function DivideSort(arrA:Array,fst:int,lst:int,arrTemp:Array)
{
//功能:递归的分解数列,排序,再合并
if (fst < lst)
{
var mid:int = (fst + lst) / 2;
DivideSort(arrA, fst, mid, arrTemp);//左边有序
DivideSort(arrA, mid + 1, lst, arrTemp);//右边有序
MergeOrderedArray(arrA, fst, mid, lst, arrTemp);//再将二个有序数列合并
}
}
您的鼓励是我写作最大的动力!
参考博文:
白话经典算法系列之五 归并排序的实现