快速排序/二分查找

 

一、快速排序

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))

 

posted @ 2020-03-27 15:16  郭磊—lily  阅读(404)  评论(0编辑  收藏  举报