js中sort、冒泡排序、快速排序

  • Array.prototype.sort()
    用于对数组的元素进行排序。该方法可以接受一个可选的比较函数,以确定数组中元素的排序方式。如果没有提供比较函数,数组元素将按照转换为字符串的顺序进行排序。

它一般会使用快速排序(Quick Sort)、归并排序(Merge Sort)或插入排序(Insertion Sort)等高效的排序算法。
具体使用哪种算法取决于引擎的实现和数组的大小。

// 默认排序,根据字符串unicode进行排序
const arr = [10, 2, 30, 1];
arr.sort(); // 结果为 [1, 10, 2, 30]

// 自定义排序(使用比较函数)
const arr = [10, 2, 30, 1];
arr.sort(function(a, b) {
    return a - b || 0;
}); // 结果为 [1, 2, 10, 30]

  • 冒泡排序(用于教学或小数据集)

 function bubbleSort(arr) {
      let len = arr.length
      let swapped
      do {
        swapped = false
        for (let i = 1;i < len;i++) {
          if (arr[i - 1] > arr[i]) {
            [ arr[i - 1], arr[i] ] = [ arr[i], arr[i - 1] ]
            swapped = true
          }
        }
        len--

      } while(swapped)
    }
    // 示例使用
    let array = [ 61, 32, 25, 11, 23, 12, 91 ]
    console.log( 原数组: , array)
    bubbleSort(array)
    console.log( 排序后数组: , array)

  • 快速排序(对于超级大的数据集)

function quickSort(arr) {
    if (arr.length <= 1) {
        return arr
    }
 
    // 选择基准值
    const middle = Math.floor(arr.length / 2)
    const pivot = arr[middle] 
    const left = [] 
    const right = [] 
    const equal = [] 
 
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] < pivot) {
            left.push(arr[i])
        } else if (arr[i] > pivot) {
            right.push(arr[i])
        } else {
            equal.push(arr[i]) 
        }
    }
 
    return [ ...quickSort(left), ...equal, ...quickSort(right) ]
}

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
可可的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容