算法学习一

1、抽屉原理:n+1 个苹果放在 n 个抽屉里,那么至少有一个抽屉中会放两个苹果。

2、分治法:

      分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;

      解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;

      合并:将各个子问题的解合并为原问题的解。

      例子:快速排序就用到了分治法。

                 1)找一个中间位,所有比他小的放一个数组,所有比他大的放一个数组,然后两个数组再次递归。中间位可以是数组的中间位置的,也可以是数组开头或者结尾的。

var quickSort = function (nums) {
        if(nums.length <= 1){
            return nums;
        }

        var n = nums.length;
        var left = [];
        var right = [];

        // mid可以取固定的中间位置的,也可以取数组开头的或者结尾的
        var mid = parseInt(n/2);

        for(var i = 0; i < n; i++){
            if(nums[i] <= nums[mid] && i !== mid){
                left.push(nums[i]);
            }else if(i !== mid){
                right.push(nums[i]);
            }
        }

        return quickSort(left).concat([nums[mid]], quickSort(right));
};

              2)原地快排:找一个基准点,一般选择数组的首位比较方便,一轮循环的目标就是循环下来基准点的左边小于等于它,基准点的右边比它大。

// 原理:https://blog.csdn.net/danting1126/article/details/61627737
// 为何从右开始:https://blog.csdn.net/lkp1603645756/article/details/85008715

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值