Skip to content

[js] 第158天 举例说明数组的排序方法有哪些? #1231

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

第158天 举例说明数组的排序方法有哪些?

Activity

vkboo

vkboo commented on Sep 22, 2019

@vkboo
  • reverse() 直接颠倒数组中的元素
// 颠倒排序
var a = [1,2,3];
var b = a.reverse();
console.log(a); // [3,2,1]
console.log(b); // [3,2,1]
  • sort() 自定义排序,基础是按照字符编码(Unicode->UTF-16)进行排序(数组在原数组上进行排序,不生成副本)
// 颠倒排序
var x = [1,3,2];
var y = x.sort((a,b) => {
    // if (a < b ) {
    //     return -1;
    //   }
    //   if (a > b ) {
    //     return 1;
    //   }
    //   // a must be equal to b
    //   return 0;

    // 以上可以简写如下
    return a - b;
});
console.log(y) // [1, 2, 3]
  • for循环

    • 冒泡排序
    function bubbleSort(arr) {
        var i = arr.length,
            j;
        var tempExchangVal;
        while (i > 0) {
            for (j = 0; j < i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    tempExchangVal = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tempExchangVal;
                }
            }
            i--;
        }
        return arr;
    }
    
    var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
    var arrSorted = bubbleSort(arr);
    console.log(arrSorted);
    • 快速排序
    const quickSort = (array) => {
        const sort = (arr, left = 0, right = arr.length - 1) => {
            if (left >= right) {//如果左边的索引大于等于右边的索引说明整理完毕
                return
            }
            let i = left
            let j = right
            const baseVal = arr[j] // 取无序数组最后一个数为基准值
            while (i < j) {//把所有比基准值小的数放在左边大的数放在右边
                while (i < j && arr[i] <= baseVal) { //找到一个比基准值大的数交换
                    i++
                }
                arr[j] = arr[i] // 将较大的值放在右边如果没有比基准值大的数就是将自己赋值给自己(i 等于 j)
                while (j > i && arr[j] >= baseVal) { //找到一个比基准值小的数交换
                    j--
                }
                arr[i] = arr[j] // 将较小的值放在左边如果没有找到比基准值小的数就是将自己赋值给自己(i 等于 j)
            }
            arr[j] = baseVal // 将基准值放至中央位置完成一次循环(这时候 j 等于 i )
            sort(arr, left, j - 1) // 将左边的无序数组重复上面的操作
            sort(arr, j + 1, right) // 将右边的无序数组重复上面的操作
        }
        const newArr = array.concat() // 为了保证这个函数是纯函数拷贝一次数组
        sort(newArr)
        return newArr
    }
    
    console.log(quickSort([6,1,1,3,4]))
xiaoqiangz

xiaoqiangz commented on Jul 26, 2022

@xiaoqiangz

sort((a,b)=> return a - b )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @haizhilin2013@xiaoqiangz@vkboo

        Issue actions

          [js] 第158天 举例说明数组的排序方法有哪些? · Issue #1231 · haizlin/fe-interview