基础排序算法

选择排序

选择一个基准值,通过遍历比出最小的和基准值替换
选择一个基准索引,比如0,然后让后面的值一次和这个0索引的值比较,比他小(大)就两个值交换,比完一轮之后基准索引+1。两轮循环,外层从i=0开始,内层从i+1开始.

  let arr = [12, 34, 30, 20, 4, 56]
  let targetIndex = 0

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

冒泡排序

选择从左或者从右开始比较,从左选择第一个值,一次和后面每一个值进行比较,只要比它小的就交换位置,直到最后一个值为止。两轮循环,外层从i=0开始,内层从i+1开始

  let arr = [12, 34, 30, 20, 4, 56]

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

  console.log(arr)

插入排序

插入排序是把需要排序的数组分成两部分,第一部分是已排好的顺序,默认从第一个值开始架设他已排好顺序,后面这个第一部分的数组会越来越多,从小到大。每次拿新的目标值先和第一部分最大值进行比较,比最大值大就位置不变进行下一个目标值,比最大值小就从大到小比过去位置后移一个直到插入到正确位置。外层循环从1开始 内层可以用while判断目标值和第一部分最大值的大小关系决定是否继续往前比较,最后把目标值放到指定位置

  let arr = [12,13,11,4,34,454,21,22,421,42,44,55,2212]

  for (let i = 1; i < arr.length; i++) {
      let preIndex = i - 1
      let current = arr[i] // 数组的某一个值不是数组类型不存在引用
      while(preIndex >= 0 && current < arr[preIndex] ) {
          arr[preIndex + 1] = arr[preIndex]
          preIndex --
          console.log(current)
      }
      arr[preIndex + 1] = current
  }

快速排序

  1. 快排的原理如下。随机选取一个数组中的值作为基准值,从左至右取值与基准值对比大小。比基准值小的放数组左边,大的放右边,
  2. 对比完成后将基准值和第一个比基准值大的值交换位置。然后将数组以基准值的位置分为两部分,继续递归以上操作。

需要递归,选中间值,有左右数组变量

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

归并排序

将数组分为两部分,再把两部分再分为两部分,知道分为一个单元数组,在组合的时候两两进行有序组合 最后组合成有序数组

总结一下:

常用排序方法

选冒快插归

  1. 选择和冒泡排序都是两层遍历,选择比冒牌多了个基准值,基准值索引得累加。
  2. 快速排序是选一个中间值分成两个数组,返回return quickSort(left).concat([pivot], quickSort(right))
  3. 插入排序顾名思义就是插入,默认找出一个有序数组[index = 0],然后拿后面的值和有序数组中的每个值比较(从右往左,由大到小),找到了合适的位置就插入,用for嵌套一个while循环。插入的本质其实也是交换值有序数组增大一位

风吹一个大耳东
400 声望28 粉丝

钻到底~