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

Posted 故里有长安丶丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)相关的知识,希望对你有一定的参考价值。

文章目录


1. 冒泡排序

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

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


    //插入排序
    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)

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

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

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]

以上是关于总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)的主要内容,如果未能解决你的问题,请参考以下文章

近30种大厂笔试常考知识点!《程序员面试宝典》开放下载

(总结2021年)互联网一线大厂,软件测试面试题

建议收藏2021年新一波跳槽季过后,互联网企业大厂软件测试面试题详细解析(常考)

GitHub疯传!北大学霸的LeetCode刷题笔记火了

手撕专有钉钉Android面试题完全指南

前端的异步解决方案(面试常考)