插入排序的原理

来源:互联网 发布:批发源码 编辑:程序博客网 时间:2024/06/13 22:52
插入排序,一般以打牌排列手牌为例子。其实我感觉用两个数组表示更好理解,即使在整个代码中只有一个数组,但
是可以抽象成两个数组。以要进行插入排序的数组内容之前的内容为新数组,原始数组为旧数组。old代表未排序的旧数组;new代表排序后的新数组。new数组中的内容是从old数组中一点一点插入进来并且每插一次进行一次排序,因此new数组永远是有序的。我们默认
new数组中已经插入了old数组的第一项function sortInsert(arr){    var len = arr.length;    for(var i = 1;i < len;i++){        var v = arr[i];//从old数组中拿到准备要插入的数组内容        var j = i - 1;//在这里可以认为这是新数组的最后一项,i之前的内容都认为是已排好序的新数组        while(j >= 0 && v < arr[j]){        //当满足条件是,我们需要对新数组进行排序,排序规则:将满足条件的那一位向后移动一位,            arr[j+1] = arr[j];            j--;        }        //待移动完毕后,将v插入到新书组        arr[j+1] = v;    }}注:因为在new数组是已经排好序的,arr[i]就是我们此时拿出要插入的内容,arr[i]与它相邻(也就是new数组的最后
一个内容)的数只有大于或者不大于两种关系,如果大于则将v插入j+1个位置即成为新数组队尾,如果小于,将满足条
件的那一位向后移动一位。然后继续比较,重复上述步骤,直到结束,最后将内容插入到已经移动好的新数组中。
原创粉丝点击