一些算法的记录

94 阅读1分钟

1、二分查找算法

Array.prototype.binarySort = function(target) {
    let low = 0;
    let high = this.length - 1;
    while(low <= high) {
        const mid = Math.floor((low + high) /2);
        const midItem = this[mid];
        // 如果查找的目标值小于中间的点
        if(target < midItem ) {
            // 说明目标值在左半边,那high指针就是mid的前一位
            high = mid - 1;
        } else if(target > midItem) {
            // 如果目标值在右半边,那low指针就是mid的后面一位
            low = mid + 1;
        } else {
            // 目标值就是正中间
            return mid;
        }
    }
    // 没找到
    return -1;
}
 
const arr = [14, 1618263247]
console.log(arr.binarySort(18));

2、冒泡排序

const bubbleSort = (arr) => {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

3、选择排序

const selectSort = (arr) => {
  let minIndex;

  for (let i = 0; i < arr.length; i++) {
    minIndex = i;

    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[minIndex]) minIndex = j;
    }
    
    let temp = arr[minIndex];
    arr[minIndex] = arr[i];
    arr[i] = temp;
  }

  return arr;
}

4、插入排序

const insertSort = (arr) => {
  for (let i = 1; i < arr.length; i++) {
    for (let j = i; j > 0; j--) {
      if (arr[j - 1] > arr[j]) {
        let temp = arr[j - 1];
        arr[j - 1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}

5、快速排序

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

6、归并排序

    var mergeSortRec = function(array){
      var length = array.length; 
      if(length === 1) {
        return array;
      }
      var mid = Math.floor(length / 2),
      left = array.slice(0, mid),
      right = array.slice(mid, length);
      return merge(mergeSortRec(left), mergeSortRec(right));
    };
    var merge = function(left, right){
      var result = [],
          il = 0,
          ir = 0;
      while(il < left.length && ir < right.length) {
        if(left[il] < right[ir]) {
          result.push(left[il++]);   
        } else {
          result.push(right[ir++]);
        } 
      }
      while (il < left.length){ 
        result.push(left[il++]);   
      }
      while (ir < right.length){   
        result.push(right[ir++]);  
      }
      return result;
    }