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

    一、快速排序

    var quickSort = function(arr) {
                    if (arr.length <= 1) { //如果数组长度小于等于1无需判断直接返回即可 
                        return arr;
                    }
                    var pot = Math.floor(arr.length / 2); //取基准点 
                    var pivot = arr.splice(pot, 1)[0]; //取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数
    
                    var left = []; //存放比基准点小的数组
                    var right = []; //存放比基准点大的数组 
                    for (var i = 0; i < arr.length; i++) { //遍历数组,进行判断分配 
                        if (arr[i] < pivot) {
                            left.push(arr[i]); //比基准点小的放在左边数组 
                        } else {
                            right.push(arr[i]); //比基准点大的放在右边数组 
                        }
                    }
                    //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1; 
                    return quickSort(left).concat([pivot], quickSort(right));
                };
                var arrNew = [3, 6, 5]
                console.log(quickSort(arrNew))
                // 使用的时候,直接调用quickSort()就行了。

    二、二分查找 (二分查找必须是一个有序数组)

    1.将数组折半,分成左右两个数组。

    2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半。

    3.之后继续折半查找,直至找到这个数。

    /**
                 *  二分查找 递归
                 * arr 已排好的数组
                 * low 第一个值的索引
                 * high 最后一个值的索引
                 * key 想要查找的值
                 */
                function binary_search(arr, low, high, key) {
                    if (low > high) {
                        return -1;
                    }
                    var mid = parseInt((high + low) / 2);
                    if (arr[mid] == key) {
                        return mid;
                    } else if (arr[mid] > key) {
                        high = mid - 1;
                        return binary_search(arr, low, high, key);
                    } else if (arr[mid] < key) {
                        low = mid + 1;
                        return binary_search(arr, low, high, key);
                    }
                }
                console.log(binary_search([1,5,6],0,2,6))

    /**
    * 二分查找 非递归
    * arr 已排好的数组
    * key 想要查找的值
    */
    
    function binary_search(arr, key) {
    var low = 0,
    high = arr.length - 1;
    
    while (low <= high) {
    var mid = parseInt((high + low) / 2);
    if (key == arr[mid]) {
    return mid;
    } else if (key > arr[mid]) {
    low = mid + 1;
    } else if (key < arr[mid]) {
    high = mid - 1;
    } else {
    return -1;
    }
    }
    }
    var arr1 = [1, 5, 7]
    console.log(binary_search(arr1, 7))
  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/guoxianglei/p/12581651.html
Copyright © 2011-2022 走看看