[Resumen]: Las entrevistas de Dachang a menudo prueban el código de desgarro manual: algoritmo de clasificación de JavaScript (clasificación de burbuja, clasificación de selección, clasificación de inserción, clasificación rápida)


1. Clasificación de burbujas

Avati

 //冒泡排序
    let arr = [2, 4, 1, 6, 3]
    function bubbled(arr) {
    
    
        for (let i = 0; i < arr.length - 1; i++) {
    
    
            //【!!注意】这里不是j=i,因为回回都必须重头遍历,才能不漏一个嘛~
            for (let j = 0; j < arr.length - 1; j++) {
    
    
                if (arr[j] > arr[j + 1]) {
    
    
                    let temp
                    temp = arr[j]
                    arr[j] = arr[j + 1]
                    arr[j + 1] = temp
                }
            }
        }
        return arr
    }
    console.log(bubbled(arr));  //[1,2,3,4,6]

2. Clasificación de selección

Avati

//选择排序(指挨个挨个遍历,`选择`右侧最小与之交换)
    let arr1 = [2, 4, 1, 6, 3]
    function select(arr1) {
    
    
        for (let i = 0; i < arr1.length - 1; i++) {
    
    
            let min = i    //保存右侧最小值的下标
            for (let j = i + 1; j < arr1.length; j++) {
    
    
                if (arr1[j] < arr1[min]) {
    
    
                    //【!!注意】:这里每次循环保存相对较小值的下标
                    min = j
                }
            }
            if (arr1[min] < arr1[i]) {
    
    
                let temp;
                temp = arr1[min]
                arr1[min] = arr1[i]
                arr1[i] = temp
            }
        }
        return arr1
    }
    console.log(select(arr1));  //[1,2,3,4,6]

3. Clasificación por inserción

Avati


    //插入排序
    let arr2 = [2, 4, 1, 6, 3]
    function Ins(arr2) {
    
    
        let temp  //专门用于保存作为比较的i项
        for (let i = 1; i < arr2.length; i++) {
    
    
            while (i > 0 && arr2[i] < arr2[i - 1]) {
    
    
                temp = arr2[i]     //先对后面的值保存一下,因为这个值还要跟前面做对比啊! 你看下一步就要把后面的值覆盖了
                arr2[i] = arr2[i - 1]

                arr2[i - 1] = temp
                i--;
            }
        }
        return arr2
    }
    console.log(Ins(arr2))  //[1,2,3,4,6]

4. Clasificación rápida

La idea básica del algoritmo de clasificación rápida es:


  • Tome un número de una matriz y llámelo pivote

  • Itera sobre la matriz, colocando números más grandes que la base a su derecha y números más pequeños que la base a su izquierda. Una vez que se completa el recorrido, la matriz se divide en dos áreas: izquierda y derecha

  • Trate las regiones izquierda y derecha como dos matrices y repita los primeros dos pasos hasta que se complete la clasificación

Avati

let arr3 = [2, 4, 1, 6, 3]
    function fast(arr3) {
    
    
        if (arr3.length <= 1) return arr3; //【!!!注意】:这一句必须加上,因为有时候递归回来可能左边数组只有一个元素(或空数组),这时直接返回arr ,结束left递归,让它去递归right

        let left = [];
        let right = [];
        let pivot = arr3[0]
        for (let i = 1; i < arr3.length; i++) {
    
    
            if (arr3[i] < pivot) {
    
    
                left.push(arr3[i])
            } else {
    
    
                right.push(arr3[i])
            }
        }
        return fast(left).concat([pivot], fast(right))
    }
    console.log(fast(arr3));   //[1,2,3,4,6]

Supongo que te gusta

Origin blog.csdn.net/weixin_60297362/article/details/123080039
Recomendado
Clasificación