• 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);
                    swap(arr, i, flag);
                }
            }
            function swap(arr, i, flag){
                var temp = arr[i];
                arr[i] = arr[flag];
                arr[flag] = temp;
            }
        }
    //js求最大子序列
        function max_sub(arr){
            var max = 0, temp_sum = 0, len = arr.length;
            for(var i =0; i < len; i++){
                temp_sum += arr[i];
                if(temp_sum > max){
                    max = temp_sum;
                }else if(temp_sum < 0){
                    temp_sum = 0;
                }
            }
            return max;
        }
    //js实现中文字段截取无乱码
        /*这里应该还需要判断str的长度,因为中文字符应该占2个长度*/
        function GBsubstr(str, start, len){
            if(str.length < len){
                return str;
            }else{
                var result = '';
                var length = start + len;
                for(var i = start; i < length; i++){
                    if(str.charCodeAt(i) > 255){
                        result += str.substr(i, 2);
                        i++;
                    }else{
                        result += str.substr(i, 1);
                    }
                }
                return result;
            }
        }


  • 相关阅读:
    laravel 解决保存Emoji 表情问题
    下载微信头像下载不了
    微信公众号开发遇到simplexml_load_string 未定义
    部署php的正确姿势
    ubuntu 安装 mysql 的正确姿势
    laravel 部署 前后端分离
    nwjs 解决手指可滑动问题
    Java8新特性Optional、接口中的默认方法与静态方法
    Java设计模式百例
    一位资深程序员大牛给予Java初学者的学习路线建议
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3359934.html
Copyright © 2020-2023  润新知