javascript實現快速排序和二分法查找


1.快速排序:

思路:找到數組中間的元素,把它單拎出來,然后從0開始判斷數組中的元素比該基准元素大還是小,小的存左邊,大的存右邊,然后如此反復遞歸,得出結果。

function quickSort(arr) {
        if (arr.length <= 1) { return arr; }//如果輸入數組長度小於等於1,直接返回數組。這也是遞歸算法的終結部分
        var base = Math.floor(arr.length / 2);//找到中間的基准元素位置
var baseEle = arr.splice(base, 1)[0];//把基准元素從arr中摘除 var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (arr[i] < baseEle) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([baseEle ], quickSort(right)); //返回遞歸左右兩個部分concat中間元素,這就是結果 };


2.二分查找法

思路:從有序的數列中折半查找,看過幸運52吧?猜價格拿大獎的時候怎么猜最好?傻子都知道。

var erfen = function (val, arr) {
        if (arr.length < 1||val<arr[0]||val>arr[arr.length-1]) { 
          return false; 
        }//如果這個數字沒在其中直接返回false
        else if (val == arr[0]||val==arr[arr.length-1]) {
            return true;
        }//如果找到了就返回true
        else if (arr.length == 1) {
            return false;
        }//如果不能再縮小了而且沒查到返回false
        var res = [];
        var base = Math.floor(arr.length / 2);
        if (val > arr[base]) {
           res = arr.splice(base + 1, arr.length - 1);
        }//如果大於中間的從右邊開始找
       else if (val = arr[base]) {
            return true;
        }//恰巧等於中間的就返回true
        else {
           res = arr.splic(0, base - 1);
        }//如果小於中間的就從右邊找
        return erfen(val,res);//遞歸
    };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM