冒泡、插入、选择、归并、快速排序

//冒泡bubble
function bubbleSort(arr) {
  let l = arr.length;
  for (let i = 0; i < l; i++) {
    for (let j = 0; j < l - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
      }
    }
  }
  return arr;
}

//插入insert
function insertSort(arr) {
  let l = arr.length;
  for (let i = 1; i < l; i++) {
    let temp = arr[i], j = i;
    while (temp < arr[j - 1] && j > 0) {
      arr[j] = arr[j - 1];
      j--;
    }
    if (i !== j)
      arr[j] = temp;
  }
  return arr;
}
//选择select
function seletSort(arr) {
  let l = arr.length;
  for (let i = 0; i < l; i++) {
    let minIndex = i;
    for (let j = i; j < l; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j;
      }
    }
    if (minIndex !== i) {
      [arr[minIndex], arr[i]] = [arr[i], arr[minIndex]]
    }
  }
  return arr;
}
//归并merge
function mergeSort(arr) {
  let l = arr.length;
  if (l <= 1) {
    return arr;
  }
  let mid = Math.floor(l / 2),
    leftArr = arr.slice(0, mid),
    rightArr = arr.slice(mid, l);
  return merge(mergeSort(leftArr), mergeSort(rightArr));
}
function merge(leftArr, rightArr) {
  let i = 0, j = 0, ll = leftArr.length, rl = rightArr.length, res = [];
  while (i < ll && j < rl) {
    if (leftArr[i] < rightArr[j]) {
      res.push(leftArr[i]);
      i++;
    } else {
      res.push(rightArr[j])
      j++;
    }
  }
  if (i < ll) {
    res.push(...leftArr.slice(i, ll));
  }
  if (j < rl) {
    res.push(...rightArr.slice(j, rl));
  }
  return res;
}
//快速 quick
function quickSort(arr) {
  return quick(arr, 0, arr.length - 1)
}
function quick(arr, left, right) {
  if (right > left) {
    let index = partition(arr, left, right);
    if (left < index - 1) {
      quick(arr, left, index - 1)
    }
    if (index + 1 < right) {
      quick(arr, index + 1, right)
    }
  }
  return arr;
}
function partition(arr, left, right) {
  let mid = Math.floor((left + right) / 2), i = left, j = right;
  while (i < j) {
    while (arr[i] < arr[mid]) {
      i++;
    }
    while (arr[j] > arr[mid]) {
      j--;
    }
    if (i < j) {
      [arr[i], arr[j]] = [arr[j], arr[i]]
    }
  }
  return i;
}
posted @ 2020-05-14 17:47  哥哦狗子  阅读(178)  评论(0编辑  收藏  举报