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))
  • 相关阅读:
    二叉排序树的查找和插入操作
    二叉排序树(二叉查找树)- 数据结构和算法73
    线性索引查找
    斐波那契查找(黄金分割法查找)- 数据结构和算法71
    插值查找(按比例查找)- 数据结构和算法70
    序列!序列!- 零基础入门学习Python016
    字符串:格式化
    字符串:各种奇葩的内置方法
    为duilib的MenuDemo增加消息响应,优化代码和显示效果
    为duilib的MenuDemo增加消息响应,优化代码和显示效果
  • 原文地址:https://www.cnblogs.com/guoxianglei/p/12581651.html
Copyright © 2011-2022 走看看