排序的几种算法

109 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

选择排序

选择排序算是比较简单的一种,拿到第一个数n ,让他和数组的其他数x进行比较(因为每一次循环会出现一个最小值,前面的就没必要重复比较了),如果n>x,就把两数的位置互换,这样当数组完成循环,就会成为一个从大到小的序列

function chooseSort(arr) {
    let replace = ""
    for (let i = 0; i < arr.length; i++) {
        for (let x = i + 1; x < arr.length; x++) {
            if (arr[i] > arr[x]) {
                replace = arr[i]
                arr[i] = arr[x]
                arr[x] = replace
            }
        }
    }
    return arr
}

函数chooseSort接收一个数组,定义replace变量用来当中间人,替换数组的值,第一次循环是对数组所有的数进行,从而达到排序。第二次是找出每一次循环的最小值,把他放在本次循环的下标

试一下

Snipaste_2022-05-27_13-01-26.png

结果

Snipaste_2022-05-27_13-02-07.png

冒泡排序

冒泡排序同样进行两次循环,每一次循环都会拿这个数n与n+1进行比较,如果n>n+1,那么这两个就交换位置,每个数都过一遍,就会排序完成


function bubbleSort(arr) {
    let replace = ""
    for (let i = 0; i < arr.length; i++) {
        for (let x = 0; x < arr.length; x++) {
            if (arr[x] > arr[x + 1]) {
                replace = arr[x + 1]
                arr[x + 1] = arr[x]
                arr[x] = replace
            }
        }
    }
    return arr
}

尝试一下

冒泡代码.png

结果

冒泡效果.png

插入排序

插入排序是拿到一个数n,把他储存变量里,然后让他对他左边的数进行比较,如果大于那么就把他左边的数放到它自身的位置,最后再把他自身放到右边的位置,这样左边就永远是一个有序的序列,循环完成就得到排序后的序列


function sort(arr) {
for (let i = 1; i < arr.length; i++) {
    index = i - 1
    current = arr[i]
    while (index >= 0 && arr[index] > current) {
        arr[index + 1] = arr[index]
        index--
    }
    arr[index + 1] = current
}
return arr
}

index记录比i小一位的数,用来比较i的值,current记录此时arr[i]的值,用于插入值

while循环,当index大于0(数组下标不能小于0),并且数组后一个值大于数组此时i的值,就会执行,把后一个值放到当前的位置,然后让index--,在进行while循环,一直到index<0或者后一个数小于前一个数结束

试一下

插入排序代码.png

效果

插入排序效果.png

结束

谢谢大家,如果喜欢点个赞,谢谢你