JavaScript实现插入排序

来源:互联网 发布:财经数据编辑 编辑:程序博客网 时间:2024/06/05 02:27

一、插入排序简介:

想象我们斗地主,摸排阶段,手里的牌都按照从小到大排序。如果每摸一张牌,我们就把他插入合适的位置,使得它比后面位置的牌小,比前面位置的牌大或者相等。

类似这样的一种排序方法就是插入排序:
在一个数组a中,我们要实现升序排序,假设我们前面已经对a[0]到a[k]排好序,现在需要将a[k+1]的值放入合适的位置。

(为简便,此处不讨论k的取值范围,只是用它代表数组的某个位置)

1、首先,我们将a[k+1]的值与a[k]比较,如果小于a[k]就交换两者的值,相等或者大于都不需要交换。假设交换了,那么现在a[k]存放的是原先a[k+1]的值,新的a[k]的值有可能比前面位置的值小,故又需要再次对a[k]与a[k-1]进行比较,以此类推。直到发现某个位置a[p](p是0到k之间数)的值已经不比a[p-1]的值小,比较结束,a[k+1]的值已经放入合适的位置a[p]。或者a[k+1]的值比前面的值都小,一步步交换之后a[0]存放了原先a[k+1]的值,那么也结束。现在a[0]到a[k+1]是一个有序数组。

2、对a[k+1]之后a[k+2]到a[a.length-1]的每一个元素都依次进行相同操作,最终得到一个有序数组。

二、JavaScript实现插入排序

 function insertion_sort(arr) {             var temp;            for (var i = 1; i < arr.length; i++) {                for (var j = i-1; j >=0; j--) {                    if (arr[j+1]<arr[j]) {                        temp=arr[j+1];                        arr[j+1]=arr[j];                        arr[j]=temp;                    }else if (arr[j+1]>=arr[j]) {                        break;                    }                }            }            return arr;        }        var a=[11,2,3,445,7,32,71,8,94];        console.log(insertion_sort(a));        var b=[94,11];        console.log(insertion_sort(b));

说明:
1、一旦发现arr[j+1]的值不比前面的值小,就可以结束内层循环了,break实现这一功能;

2、内层循环用arr[j+1]的原因:初始时a[j](即a[i-1])代表a[i]前一个位置,进入循环后,a[j+1]就表示了a[i]的位置,实现了a[i]和a[i-1]的第一次比较;随着j第一次自减,实际上比较了a[i-1]和a[i-2];依次类推。如果将arr[j+1]改成a[i]是不行的,因为没有实现位置的移动。

阅读全文
0 0
原创粉丝点击