日期:2014-05-16  浏览次数:20378 次

javascript排序 查找算法大全

在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍。为了加深印象,特意把里面的常用的排序、查找算法用js写了一遍

具体的实例在我的github上,大家可以访问的: https://github.com/chenkehxx/practice     js_sort.html文件

//js插入排序
    function insertSort(arr){
        var result =[];
        result.push(arr[0]);
        for(var i = 1, len = arr.length; i < len; i++){
            var el = arr[i];
            if(result[i - 1] > el){
                for(var j = 0; j < i; j++){
                    if(result[j] > el){
                        result.splice(j, 0, el);
                        break;
                    }
                }
            }else{
                result.push(el);
            }
        }
        return result;
    }

 //js的归并排序
    function mergeSort(arr){
        var len = arr.length;
        if(len > 1){
            var index = Math.floor(len / 2);
            var left = arr.slice(0, index), right = arr.slice(index);
            return merge(mergeSort(left), mergeSort(right));
        }else{
            return arr;
        }
        function merge(left, right){
            var arr = [];
            while(left.length && right.length){
                if(left[0] < right[0]){
                    arr.push(left.shift());
                }else{
                    arr.push(right.shift());
                }
            }
            return arr.concat(left, right);
        }
    }

//js快排
function QuickSort(arr){
        if(arr.length <= 1){
            return arr;
        }
        var index = Math.floor(arr.length / 2);
        var key = arr.splice(index, 1)[0];
        var left = [], right = [];
        for(var i = 0; i < arr.length; i++){
            if(arr[i] < key){
                left.push(arr[i]);
            }else{
                right.push(arr[i]);
            }
        }
        return QuickSort(left).concat([key], QuickSort(right));
    }

//js冒泡
function bubbleSort(arr){
        var len = arr.length;
        for(var i = 0; i < len; i++){
            for(var j = len -1; j > i; j--){
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
   

//js二分查找
    function binarySearch(arr, key, low, hight){
        var mid = Math.floor((low + hight) / 2);
        var result = -1;
        console.log(key, low, hight, mid);
        if(key == arr[mid]){
            result = mid;
            return result;
        }else if(key > arr[mid]){
            hight = mid - 1;
            binarySearch(arr, key, low, hight);
        }else{
            low = mid + 1;
            binarySearch(arr, key, low, hight);
        }
        return result;
    }
常用的其他算法

 //js查找两个数组中相同的元素
    function findSame(arr1, arr2){
        var len1 = arr1.length, len2 = arr2.length;
        var i = 0, j = 0, result = [];
        while(i < len1 && j < len2){
            if(arr1[i] == arr2[j]) {
                result.push(arr1[i]);
                i++;
                j++;
            }else if(arr1[i] < arr2[j]){
                i++;
            }else{
                j++;
            }
        }
        return result;
    }

//js全排列
    function sortAll(arr, flag){
        var len = arr.length;
        if(len == flag){
            console.log(arr);
        }else{
            for(var i = flag; i < arr.length; i++){
                swap(arr, i , flag);
                sortAll(arr, flag + 1);