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);//遞歸 };