数组的冒泡排序和选择排序

博客主要介绍了两种排序算法。冒泡排序是依次比较相邻两数,将小数放前、大数放后,重复此过程直至完成排序;选择排序则是每次从待排序数据中选出最小(或最大)元素,存放在序列起始位置,直到全部排完。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.冒泡排序

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面大数放在后面

即首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

var a = [10, 2, 1, 4, 3, 5, 7, 6, 9, 8];
    for (var i = 0; i < a.length; i++) {
        var temp = null;
        for (var k = 0; k < a.length - 1; k++) {
            if (a[k] < a[k + 1]) {
                temp = a[k + 1];
                a[k + 1] = a[k];
                a[k] = temp;
            }
        }
    }
    var a2 = [10, 2, 1, 4, 3, 5, 7, 6, 9, 8];
    var a1 = a2.sort(function (n1, n2) {
        return n2 - n1;
    });
    console.log(a1);

2.选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

  •  
console.time();
    function selectsort(a) {
        var minindex = 0;
        var temp = null;
        for (var i = 0; i < a.length; i++) {
            minindex = i;//默认一个最小的索引   拿最小索引的值  去和后边的值对比  如果你小   minindex=最小值的索引
            for (var k = i + 1; k < a.length; k++) {
                if (a[k] < a[minindex]) {
                    minindex = k;
                }
            }
            temp = a[i];
            a[i] = a[minindex];
            a[minindex] = temp;

        }
        console.log(a);
    }
    selectsort(arr);
    console.timeEnd();
  • 快速排序
var res = [1, 18, 16, 0, 4, 2, 7, 5];
    function qucksort(r) {
        if (r.length < 2) {
            return r;
        }
        var centerindex = parseInt(r.length / 2);//值可能有小数点
        var num = r.splice(centerindex, 1)[0];
        var left = [];
        var right = [];
        for (var i = 0; i < r.length; i++) {
            if (r[i] < num) {
                //左边加
                left.push(r[i]);
            }
            else {
                //右边加
                right.push(r[i]);
            }
        }
        return qucksort(left).concat(num).concat(qucksort(right));

    }
    console.log(qucksort(res));

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值