JavaScript几种排序方式 数组方法、冒泡排序、快速排序、插入排序、选择排序

概要

数组是我们前端编程中,经常需要操作的数据类型,下面来说说几种数组的排序方式

sort

js中用方法sort()为数组排序。可以传入一个比较的函数(函数做为参数),会改变原数组

arr.sort(function(v1,v2){
if(v1<v2)
return -1
else
return 1
})

冒泡排序

使用双层循环进行冒泡排序

for(var i=0; i<arr.length-1;i++){//排几次
        for(var j=0;j<arr.length-i-1;j++){//每轮排序的项的索引
            //如果前面比后面小,则交换2个数的位置
            if(arr[j]<arr[j+1]){//比如第一轮的arr[0]和arr[1]
                var temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    console.log(arr);

快速排序

设置一个函数,获取一个数组的中间值,与这个数进行比较,设置2个数组,比它小放入left数组,比它大,放入right;然后把left和right再放到这个函数中,直到数组个数为1(递归)

function quickSort(arr) {
    if (arr.length <= 1) {
        return arr;
    }
 
    const pivotIndex = Math.floor(arr.length / 2);
    const pivot = arr.splice(pivotIndex, 1)[0];
    const left = [];
    const 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));
}
 
// 使用示例
const unsortedArray = [3, 6, 8, 10, 1, 2, 1, 4, 7, 9];
const sortedArray = quickSort(unsortedArray);
console.log(sortedArray); // 输出: [1, 1, 2, 3, 4, 6, 7, 8, 9, 10]

例如:

  • API
  • 支持模型类型

插入排序

●从第一个元素开始,该元素可以认为已经被排序;
●取出下一个元素,在已经排序的元素序列中从后向前扫描;
●如果该元素(已排序)大于新元素,将该元素移到下一位置;
●重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
●将新元素插入到该位置后;
●重复步骤2~5。

function insertionSort(arr) {
    for (let i = 1; i < arr.length; i++) {
        let key = arr[i];
        let j = i - 1;
 
        // 移动元素并查找插入点
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
    return arr;
}
 
// 示例使用
const arr = [10, 2, 9, 3, 8, 4, 7, 5, 6];
const sortedArr = insertionSort(arr);
console.log(sortedArr); // 输出: [2, 3, 4, 5, 6, 7, 8, 9, 10]

选择排序

设置一个max索引为0,第一轮跟其他元素进行比较,确定最大的值,把索引赋值给max,然后将arr[max]和arr[0]交换。然后第二轮max为1,在跟他们元素比较,确定最大的值,把索引赋值给max,然后将arr[max]和arr[1]交换。

function selectionSort(arr) {
    var len = arr.length;
    var minIndex, temp;
    for (var i = 0; i < len - 1; i++) {
        minIndex = i;
        for (var j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}
 
// 示例使用:
var arr = [64, 25, 12, 22, 11];
console.log('Before sort:', arr); // 输出:Before sort: [64, 25, 12, 22, 11]
console.log('After sort:', selectionSort(arr)); // 输出:After sort: [11, 12, 22, 25, 64]

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值