最近在开数据结构与算法,把看到的总结一下,参考资料算法导论。现在是最简单的插入排序:
public static function InstertSort(p_list:Array):void
{
var a:Array = p_list;
var key:Number;
var i:int;
//迭代
for(var j:int = 1; j<a.length; j++){
key = a[j];//标记
i = j-1;
//当对比的值比目标值大时需要执行排序,因为左边都是排好序的,所以当出现条件不符的时候,不需要继续往下对比
while(i>=0 && a[i]>key){
a[i+1] = a[i];//对比值比目标值大,对比值需要往后移一位
i--;//在比较下一个看是否需要移位
}
// 比较完成之后置换a[i+1] a[j] 因为假如执行过排序,那么a[i+1]已经被移位了
if(i != j-1){
a[i+1] = key;
}
}
}
插入算法需要注意的是,肯定有一边是排好序的,你只需要比较一下,目标值和要对比的值谁大,一直比到比目标值小的那个值为止,这时循环就可以中断了,然后,既然它要插进去,那么后面的值都要移位,给它腾位置。
//-------------------------------------------------------------------------------------------
结果:
输入:1,3,20,45,78,6,4,76,9,12,54
输出:1,3,4,6,9,12,20,45,54,76,78