zoukankan      html  css  js  c++  java
  • js常见算法

    常用的两种排序方法

    //利用sort方法进行排序
        var arr = new Array(6)
        arr[0] = "10"
        arr[1] = "5"
        arr[2] = "40"
        arr[3] = "25"
        arr[4] = "100"
        arr[5] = "1"
        var arr1 = [12, 14, 15, 2, 4, 5, 214, 53, 75, 34]
        
        function fn(array) {
            return array.sort(function(a, b) {
                return a - b;
            })
        }
        console.log(fn(arr1))
        // 冒泡排序
        function fn1(array) {
            var i = 0,
            len = array.length,
            j, d;
            for (; i < len; i++) {
                for (j = 0; j < len; j++) {
                    if (array[i] < array[j]) {
                        d = array[j];
                        array[j] = array[i];
                        array[i] = d;
                    }
                }
            }
            return array;
        }
        console.log(fn1(arr1))
        
        //线性搜索(入门HelloWorld)
    //A为数组,x为要搜索的值
    function linearSearch(A, x) {
      for (var i = 0; i < A.length; i++) {
        if (A[i] == x) {
          return i;
        }
      }
      return -1;
    }
    
    //二分搜索
    //A为已按"升序排列"的数组,x为要查询的元素
    //返回目标元素的下标
    function binarySearch(A, x) {
      var low = 0, high = A.length - 1;
      while (low <= high) {
        var mid = Math.floor((low + high) / 2); //下取整   
        if (x == A[mid]) {
          return mid;
        }
        if (x < A[mid]) {
          high = mid - 1;
        }
        else {
          low = mid + 1;
        }
      }
      return -1;
    }
    
    //选择排序  数据规模越小越好
    //思路:找到最小值的下标记下来,再交换
    
    function selectionSort(arr) {
        var len = arr.length;
        var minIndex, temp;
        for (var i = 0; i < len - 1; i++) {
            minIndex = i;
            for (var j = i + 1; j < len; j++) {
                if (arr[j] < arr[minIndex]) {     //寻找最小的数
                    minIndex = j;                 //将最小数的索引保存
                }
            }
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        return arr;
    }
    
    //插入排序
    //假定当前元素之前的元素已经排好序,先把自己的位置空出来,
    //然后前面比自己大的元素依次向后移,直到空出一个"坑",
    //然后把目标元素插入"坑"中
    
    function insertionSort(arr) {
        var len = arr.length;
        var preIndex, current;
        for (var i = 1; i < len; i++) {
            preIndex = i - 1;
            current = arr[i];
            while(preIndex >= 0 && arr[preIndex] > current) {
                arr[preIndex+1] = arr[preIndex];
                preIndex--;
            }
            arr[preIndex+1] = current;
        }
        return arr;
    }
    
    //字符串反转(比如:ABC -> CBA)
    function inverse(s) {
      var arr = s.split('');
      var i = 0, j = arr.length - 1;
      while (i < j) {
        var t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
        i++;
        j--;
      }
      return arr.join('');
    }
    
    //js递归常见算法 阶乘
    
    function fact(num) {
        if (num <= 1) {
            return 1;
        } else {
            return num * arguments.callee(num - 1); //此处更改了。 
        }
    }
    var anotherFact = fact;
    fact = null;
    alert(anotherFact(4)); //结果为24.
    //更换对象的key值
    var arr = ['e','f','g'];
    
    var obj = {a:1,b:2,c:3}
    
    var keyArr=[];
    for(var key in obj){
    	keyArr.push(key);
    }
    arr.map(function(value,index,key){
    	obj[value] = obj[keyArr[index]];
    	delete obj[keyArr[index]]
    });
    console.log(obj);
    

      

    /*数组去重 根据对象的key值唯一性*/
        var arr = [2,4,8,2,4];
        var obj = {},i = 0;
        for(; i < arr.length; i++){/*数组先转换为obj对象*/
            obj[arr[i]] = true;
        }
        console.log(obj);
    
        var newArr = [];
        for(var item in arr){/*遍历数组的属性 并判断是否是对象的key值 如果是就push到新数组*/
            if(obj.hasOwnProperty(item)){
                newArr.push(item);
            }
        }
        console.log(newArr);

     

  • 相关阅读:
    Intellij IDEA +genymotion安装配置
    openssl编译参数选项
    shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出
    linux 系统中 /etc/passwd 和 /etc/shadow文件详解
    linux crypt()函数使用总结
    linux popen()函数使用
    AES加解密所遇问题
    linux 修改密码命令
    linux新增动态库后可执行程序找不到的问题
    inet_addr()和inet_ntoa()使用注意
  • 原文地址:https://www.cnblogs.com/goweb/p/6427627.html
Copyright © 2011-2022 走看看