[Summary]: Big factory interviews often test hand-tear code - JavaScript sorting algorithm (bubble sort, selection sort, insertion sort, quick sort)


1. Bubble sort

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. Selection sort

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. Insertion sort

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. Quick Sort

The basic idea of ​​quicksort algorithm is:


  • Take a number from an array and call it a pivot

  • Iterates over the array, putting numbers larger than the base to its right and numbers smaller than the base to its left. After the traversal is completed, the array is divided into two areas: left and right

  • Treat the left and right regions as two arrays and repeat the first two steps until the sorting is complete

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]

Guess you like

Origin blog.csdn.net/weixin_60297362/article/details/123080039