【总结】:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序、选择排序、插入排序、快速排序)


1. 冒泡排序

avator

 //冒泡排序
    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. 选择排序

avator

//选择排序(指挨个挨个遍历,`选择`右侧最小与之交换)
    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. 插入排序

avator


    //插入排序
    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. 快速排序

快速排序算法的基本思想是:


  • 从数组中取出一个数,称之为基数(pivot)

  • 遍历数组,将比基数大的数字放到它的右边,比基数小的数字放到它的左边。遍历完成后,数组被分成了左右两个区域

  • 将左右两个区域视为两个数组,重复前两个步骤,直到排序完成

avator

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]

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>