js ---- 排序(1)

32 阅读1分钟

js ---- 排序(1)

目录

[TOC]

冒泡排序

可以先看动图,如果动图就能够理解的话,就不需要看下面的步骤了。
bubbleSort.gif

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较
let array = [8, 7, 0, 6, 5]
//第几轮
for (let i = 0; i < array.length; i++) {
 
    for (let j = 0; j < array.length - 1 - i; j++) {
        if (array[j] > array[j + 1]) {
            let a = array[j]
            array[j] = array[j + 1]
            array[j + 1] = a
        }
    }
 
}
console.log(array);

选择排序

以数列{20,40,30,10,60,50}为例,演示其选择排序过程(如下图)。

重复元素个数减一次

把第一个没有排序过的元素设为最小值

遍历每一个没有排序过的元素(如果元素<现在的最小值),将此元素设为新的最小值

将最小值元素跟第一个没有排序过的位置交换

排序流程如下:

在这里插入图片描述

function sleectSort(array) {
 
    let indexMin
    for (let i = 0; i < array.length - 1; i++) {
        indexMin = i
        for (let j = i; j < array.length; j++) {
          if (array[j] < array[indexMin]) {
                indexMin = j
            }
        }
        if (i != indexMin) {
            let a = array[i]
            array[i] = array[indexMin]
            array[indexMin] = a
        }
 
    }
    return array
}
console.log(sleectSort(array));

插入排序

1、先拿到第一个元素,认为它是已排序的
2、拿到下一个元素a,与已排序序列从后往前相比
3、如果已排序序列中的元素大于a,则将它的位置往后移一位
4、重复2,3步骤,知道已排序序列中的元素小于等于a
5、将a插入到4布中元素后

function inserShort(array) {
    let temp
    for (let i = 1; i < array.length; i++) {
        let temp = array[i]
        let j = i
        while (j > 0 && array[j - 1] > temp) {
            array[j] = array[j - 1]
            j--
        }
        array[j] = temp
    }
    return array
}
console.log(inserShort([5, 4, 3, 2, 1]));