记录几种常见的数组排序方式

176 阅读2分钟

JavaScript数组排序方式有很多,最简单的排序方式就是使用Math.sort((a,b)=>a-b)直接搞定,但有时只会一种方法却显得没有逼格,学习多几种方法多几分自信,毕竟技多不压身嘛。

数组位置交换方法

数组排序就是比较各数组元素大小,然后交换相对应的位置,来个交换数组位置的函数。

    // 交换数组位置
    const swap=(array,a,b)=>[array[a],array[b]]=[array[b],array[a]]  //array为数组,a、b为数组下标

冒泡排序

冒泡排序即取数组两个相邻的元素依次比较大小,直到没有相邻元素需要交换。

    let arr = [5,3,10,-5,6,7,2];
    // 冒泡排序
    const bubbleSort=(array)=>{
        if(!Array.isArray(array)){
            console.error('传入array非数组') 
            return '传入array'+array
        } 
        for(let i=0;i<array.length-1;i++){
            for(let j=0;j<array.length-1;j++){
                if(array[j]>array[j+1]){
                    //交换数组元素位置
                    swap(array,j,j+1)
                }
            }
        }
        return array
    }
    // console.log('bubbleSort',bubbleSort(arr)) //[-5, 2, 3, 5, 6, 7, 10]

快速排序

快速排序是通过多次比较和交换来实现排序,在一个数组中取一个数作为比较的基数,根据这个基数将数组分为两部分,然后继续递归排序这两部分,最终实现所有数组元素排序。

    let arr = [5,3,10,-5,6,7,2];
    // 快速排序
    const quickSort=(array)=>{
        if(!Array.isArray(array)){
            console.error('传入array非数组') 
            return '传入array'+array
        } 
        if(array.length<=1)return array
        let leftArr=[];
        let rightArr=[];
        // 获取中间基数的下标与值
        //这里我是取数组的中间位置
        let middleIndex=Math.floor(array.length/2);
        let middleValue=array.splice(middleIndex,1)[0];
        for(let i=0;i<array.length;i++){
            array[i]<middleValue?leftArr.push(array[i]):rightArr.push(array[i]);
        }
        //分别递归分开的两部分数组并与中间值拼接
        return quickSort(leftArr).concat([middleValue],quickSort(rightArr))

    }
    // console.log('quickSort',quickSort(arr))//[-5, 2, 3, 5, 6, 7, 10]

选择排序

选择排序是每一次从待排序的元素中选出最小(最大)的元素放置序列的开头,然后再从未排序的数组元素中选取元素放置已排序的末尾,直到待排序的数组元素拍完。

    let arr = [5,3,10,-5,6,7,2];
    // 选择排序
    const selectSort=(array)=>{
        if(!Array.isArray(array)){
            console.error('传入array非数组') 
            return '传入array'+array
        } 
        for(let i=0;i<array.length;i++){
            let currentIndex=i;
            for(let j=i+1;j<array.length;j++){
                // console.log(array[j],array[currentIndex])
                if(array[j]<array[currentIndex]){
                    // console.log(array[j],array[currentIndex])
                    currentIndex=j;
                }
            }
            if(currentIndex!==i){
               //交换数组元素位置
                swap(array,i,currentIndex);
                // console.log(array)
            }
        }
        return array
    }
    // console.log('selectSort',selectSort(arr))//[-5, 2, 3, 5, 6, 7, 10]

结尾

呼~,这就是我所理解的几种数组排序方式,不是很难,就怕想不明白。