js中的插入排序

插入排序

插入排序的思想:将整个数组a分为有序和无序的两个部分。前者在左边,后者在右边。开始有序的部分只有a[0] , 其余都属于无序的部分
每次取出无序部分的第一个(最左边)元素,把它加入有序部分。假设插入合适的位置p,则原p位置及其后面的有序部分元素都向右移动一个位置,有序的部分即增加了一个元素。一直做下去,直到无序的部分没有元素

function insert(arr){
    //1. 准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
    let handle=[]
    handle.push(arr[0])
    //2. 从第二项开始一次抓牌,一直到把牌面上的牌抓光
    for(let i=1;i<arr.length;i++){
        //a是新抓的牌
        let a=arr[i]
        //和handle手里的牌一次比较(从后向前)
        for(let j=handle.length-1;j>=0;j--){
            //每一次要比较的手里的牌
            let b=handle[j]
            //如果当前新牌A比要比较的牌B大,把A放到B的后面
            if(a>b){
                handle.splice(j+1,0,a)
                break
            }
            //已经比到了第一项了,我们把新牌A放到最前面即可
            if(j===0){
                handle.unshift(a)
            }
        }
    }
    return handle
}
let arr=[1,5,3,7,8]
let result =insert(arr)
console.log(result)//[1, 3, 5, 7, 8]

猜你喜欢

转载自www.cnblogs.com/my466879168/p/12334948.html