JS--分治排序

一、分
运用递归,不断分割

二、治
1、创建一个临时数组用来存放
2、比较左右数组中的第一个数,若左边小,就把左边第一个数放进临时数组,反之把右边第一个数放进临时数组
3、处理左边数组剩余数据,处理右边数组剩余数据

//slice:是截取用的[start,end)

//splice:是做删除 插入 替换用的(start,end,insertElement...);



var devide_sort = function(nums) {

    //递归停止条件
    if (nums.length < 2) {
        return nums;
    }

    //将数组用递归切分
    var mid = nums.length / 2;
    //创建每个递归层的left数组
    var left = nums.slice(0, mid); //splice,开区间[0,mid),返回被切了的数组,nums也会改变
    //创建每个递归层的right数组
    var right = nums.slice(mid, nums.length);

    return merge_sort(devide_sort(left), devide_sort(right));
};

var merge_sort = function(left, right) {

    //这里才是重点
    //排序
    var temp_Array = [];
    //当左数组与右数组长度都大于零
    while (left.length && right.length) {
        //比较左右数组第一个元素的大小---永远都是第一个元素,因为前面的都被shift掉了
        if (left[0] > right[0]) {
            temp_Array.push(right.shift());
        } else {
            temp_Array.push(left.shift());
        }
    }
    //处理左边剩余数组
    while (left.length) {
        temp_Array.push(left.shift());
    }
    //处理右边剩余数组
    while (right.length) {
        temp_Array.push(right.shift());
    }



    return temp_Array;


};


console.log(devide_sort([6, 3, 5, 4, -1, -8, -4, 2]));

知识点:

//slice:是截取用的[start,end) ,注意: slice()方法不会改变原始数组。slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

//splice:是做删除 插入 替换用的(start,end,insertElement…);这种方法会改变原始数组。返回值:如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。也就是原来的数组也改变了,是删除完了剩下的元素,返回值是被删除的元素

slice[start,end):

参数:

start:开始位置的索引

end:结束位置的索引(但不包含该索引位置的元素)

例如:

var arr=[‘a’,’b’,’c’,’d’]

var newArr=arr.slice(0,3); //不包含索引值为3对应的元素

console.log(newArr); //输出的是[‘a’,’b’,’c’,’]

var newArr2=arr.slice(0); //如果没有第二个参数,截取到的是最后一个元素

console.log(newArr2); //输出的是[‘a’,’b’,’c’,’d’]

splice具有删除,插入,替换的功能

1:删除的功能

splice(index,count)

参数:

index:开始位置的索引

count:要删除元素的个数

返回:返回的是包含被删除元素的数组对象

//删除功能

Var newArr=arr.splice(1,2); //会把b,c两个元素给删除掉

console.log(arr); //[‘a’,’d’]

console.log(newArr); //返回[‘b’,’c’]

  1. 插入功能

splice(index,0,插入的项)

参数

index:插入元素的索引值

例如:

//插入功能

var arr=[‘a’,’b’,’c’,’d’]

var newArr=arr.splice(2,0,’张三’)

console.log(arr) //输出=[‘a’,’b’,’张三’,’c’,’d’]

3:替换功能

splice(index,num,value)

index:开始的索引位置

num:删除项的数(如果num为0,就是插入功能)

value:插入的值

返回:返回的是包含被删除的元素的数组对象

var arr=[‘a’,’b’,’c’,’d’]

var newArr=arr.splice(2,2,’张三’,’李四’)

console.log(arr) //输出=[‘a’,’b’,’张三’,’李四’]

console.log(newArr) //输入[‘c’,’d’]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值