zoukankan      html  css  js  c++  java
  • 快速排序和二分查找

      快排和二分查找都基于一种叫做「分治」的算法思想,通过对数据进行分类处理,不断降低数量级,实现O(logN)(对数级别,比O(n)这种线性复杂度更低的一种,快排核心是二分法的O(logN),实际复杂度为O(N*logN))的复杂度。

      

    快速排序

    快排大概的流程是:

    1. 随机选择数组中的一个数 A,以这个数为基准
    2. 其他数字跟这个数进行比较,比这个数小的放在其左边,大的放到其右边
    3. 经过一次循环之后,A 左边为小于 A 的,右边为大于 A 的
    4. 这时候将左边和右边的数再递归上面的过程
    const Arr = [85, 24, 63, 45, 17, 31, 96, 50];
    function quickSort(arr) {
        if (arr.length <= 1) {
            return arr;
        }
        let pivotIndex = Math.floor(arr.length / 2);
        let pivot = arr.splice(pivotIndex, 1)[0];
        let left = [];
        let right = [];
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] < pivot) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
        // 递归
        return quickSort(left).concat([pivot], quickSort(right));
    }
    
    console.log(quickSort(Arr));...
    
    https://juejin.im
    掘金 — 一个帮助开发者成长的社区

    二分查找

    二分查找法主要是解决「在一堆有序的数中找出指定的数」这类问题,不管这些数是一维数组还是多维数组,只要有序,就可以用二分查找来优化。

    二分查找是一种「分治」思想的算法,大概流程如下:

    1. 数组中排在中间的数字 A,与要找的数字比较大小
    2. 因为数组是有序的,所以: a) A 较大则说明要查找的数字应该从前半部分查找 b) A 较小则说明应该从查找数字的后半部分查找
    3. 这样不断查找缩小数量级(扔掉一半数据),直到找完数组为止

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    function Find(target, array) {
        let i = 0;
        let j = array[i].length - 1;
        while (i < array.length && j >= 0) {
            if (array[i][j] < target) {
                i++;
            } else if (array[i][j] > target) {
                j--;
            } else {
                return true;
            }
        }
        return false;
    }
    
    //测试用例
    console.log(Find(10, [
        [1, 2, 3, 4], 
        [5, 9, 10, 11], 
        [13, 20, 21, 23]
        ])
    );...
    
    https://juejin.im
    掘金 — 一个帮助开发者成长的社区
  • 相关阅读:
    FEniCS 1.1.0 发布,计算算术模型
    Piwik 1.10 发布,增加社交网站统计
    淘宝褚霸谈做技术的心态
    CyanogenMod 10.1 M1 发布
    Druid 发布 0.2.11 版本,数据库连接池
    GNU Gatekeeper 3.2 发布
    Phalcon 0.9.0 BETA版本发布,新增大量功能
    EUGene 2.6.1 发布,UML 模型操作工具
    CVSps 3.10 发布,CVS 资料库更改收集
    Opera 移动版将采用 WebKit 引擎
  • 原文地址:https://www.cnblogs.com/guoxianglei/p/9474846.html
Copyright © 2011-2022 走看看