常用的几种数组排序算法

124 阅读1分钟

复杂度:O(n^2)

  1. 冒泡排序
function sort(nums: number[]): number[] {
  for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
      if (nums[i] > nums[j]) {
        const temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
      }
    }
  }
  return nums;
}

复杂度:O(nlogn)

  1. 归并排序
function mergeSort(nums: number[]): number[] {
  const len = nums.length;
  if (len === 1) return nums;
  const middle = Math.floor(len / 2);
  const left = nums.slice(0, middle);
  const right = nums.slice(middle);
  // 递归二分数组,然后对每个子序列排序
  return merge(mergeSort(left), mergeSort(right));
}

// 排序并合并左右两子序列,返回一个新的排序好的序列
function merge(left: number[], right: number[]): number[] {
  let result = [];
  while (left.length && right.length) {
    if (left[0] <= right[0]) {
      result.push(left.shift());
    } else {
      result.push(right.shift());
    }
  }
  if (!left.length) result = result.concat(right);
  if (!right.length) result = result.concat(left);
  return result as number[];
}