JavaScript 数组常见排序算法(冒泡、选择、插入)

// sort函数排序

[8,2,4,9,1,3,7,5,6].sort((a,b)=>{return a-b})

// 冒泡排序 // 思想: 每次找出一个 最大/小 将它像冒泡一下 排到最左/右 // 分析: 需要两层循环,
// 第一层:冒泡多少次; 需要找到 a.length-1 个最大的数,剩下一个已经是最小的了不用在冒泡
// 第二层:需要比较几次; 找出本次最大的需要比较几次,已经找出了i个最大的,name剩余 a.length-i个数只需要比较 a.length-i-1 次

var a = [8,2,4,9,1,3,7,5,6]
function bubbleSort(a){
    for(let i=0; i <= a.length-1; i++) {
        for(let j=0; j < a.length-i-1; j++) {
            if(a[j] > a[j+1]) {
                const temp = a[j]
                a[j] = a[j+1]
                a[j+1] = temp
            }
        }
        // console.log(i,' - ', a)
    }
}
// bubbleSort(a)
// console.log(a)

// 选择排序 O(n²) // 思想: 每次找到第 i 小数的下标,将该下标的数和应该排到哪里的下标(i)的数对换 // 分析:
需要两层循环
// 第一层:找出多少次最小的数; 需要找出并排好 i-1 次最小的数
// 第二层:找出本次 第 i 小的数的小标;

var a2 = [8,2,4,9,1,3,7,5,6]
function selectionSort(a2) {
    var len = a2.length;
    var minIndex, temp;
    for (var i = 0; i < len - 1; i++) {
        minIndex = i;
        for (var j = i + 1; j < len; j++) {
            if (a2[j] < a2[minIndex]) {     //寻找最小的数
                minIndex = j;                 //将最小数的索引保存
            }
        }
        temp = a2[i];
        a2[i] = a2[minIndex];
        a2[minIndex] = temp;
        // console.log(a2)
    }
    return a2;
}
selectionSort(a2)
// console.log(a2)

// 插入排序 // 思想: 每一步将一个待排序的数据 正确插入到 前面已经排好序的 有序序列中,直到插完所有元素为止

var a3 = [8,2,4,9,1,3,7,5,6]
function insertionSort(arr) {
    var len = arr.length;
    var preIndex, current;
    for (var i = 1; i < len; i++) {
        preIndex = i - 1;
        current = arr[i];
        while(preIndex >= 0 && arr[preIndex] > current) {
            arr[preIndex+1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex+1] = current;
        console.log(a3)
    }
    return arr;
}
insertionSort(a3)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#老程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值