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);