排序方法

一、sort

先看下sort默认排序

const sortArr = [1, 3, 2, 7, 11, 44, 32, 5, 100, 78, 66, 9, 8];
console.log(sortArr.sort()) // [1, 100, 11, 2, 3, 32, 44, 5, 66, 7, 78, 8, 9]
sort()的问题很明显,它只比较最前面的数字!
 
如果想用sort正常排序
// 正序
sortArr.sort((a, b) => {
    return a - b;
})
// [1, 2, 3, 5, 7, 8, 9, 11, 32, 44, 66, 78, 100]

// 倒序
sortArr.sort(function (a, b) {
  return b - a
}) 
//[100, 78, 66, 44, 32, 11, 9, 8, 7, 5, 3, 2, 1]

二、冒泡排序

思路:

1、依次比较相邻的两个元素,如果前一个比后一个大,则交换位置;
2、第一轮的时候最后一个元素是最大的一个(以此类推,第二轮的时候倒数第二个元素是第二大的);
3、按照步骤一的方法进行相邻两个元素的比较,交换位置之后,由于最后一个元素已经是最大的了,所以最后一个元素不用参与下一轮比较(以此类推,第二轮结束后,后面的两个元素就不用参与下一轮的比较了)。
const sortArr = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 60, 44]
function bubbleSort(arr) {
    for (let i=0; i<arr.length; i++) {
        for (let j=i + 1; j<arr.length; j++) {
            if (arr[i] > arr[j]) {
                [arr[i], arr[j]] = [arr[j], arr[i]]
            }
        }
    }
    return arr;
}
console.log(bubbleSort(sortArr)) // [2, 3, 4, 11, 33, 44, 56, 60, 76, 88, 90, 99, 100]

三、快速排序

思路:

1、取出数组中间的一个值pivot
2、定义两个空数组leftright;
3、循环数组中剩下的元素(步骤1之后的数组),和pivot比较,比它小的放进left,比它小的放进right;
4、递归调用,leftright都使用快速排序处理。
const sortArr = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 60, 44]
function quickSort(arr) {
    if (arr.length <= 1) return arr;
    let pivotIndex = Math.floor(arr.length / 2);
    let pivot = arr.splice(pivotIndex, 1)[0];
    let left = [];
    let right = [];
    for (let i=0; i<arr.length; i++) {
        if (arr[i]<pivot) {
            left.push(arr[i])
        } else {
            right.push(arr[i])
        }
    }
    return quickSort(left).concat(pivot, quickSort(right))
}
console.log(quickSort(sortArr)); // [2, 3, 4, 11, 33, 44, 56, 60, 76, 88, 90, 99, 100]

四、选择排序

思路:

1、在数组中找到最小元素,放在起始位置;
2、从剩下的元素中,再找到第二小的元素,放在第二位;
3、以此类推,可以得到排好序的数组。

const sortArr = [11, 2, 4, 3, 88, 90, 56, 33, 76, 100, 99, 80, 44]
function selectionSort(arr) {
    for (let i=0; i<arr.length; i++) {
        let index = i;
        for (let j=i+1; j<arr.length; j++) {
            if (arr[j] < arr[index]) {
                index = j;
            }
        }
        [arr[i], arr[index]] = [arr[index], arr[i]]
    }
    return arr;
}
console.log(selectionSort(sortArr)) // [2, 3, 4, 11, 33, 44, 56, 76, 80, 88, 90, 99, 100]

 

版权所有:https://www.jianshu.com/p/df55af741adb

posted @ 2022-07-14 18:13  两只小老虎  阅读(66)  评论(0编辑  收藏  举报