前端中的算法3:选择排序

二分一般针对有序排序的数  乱序排列 可以学习最简单的选择排序  

选择排序速度并不快 但是很好懂

比如一个集合 [99,85,43,70,20,88]

第一次选择最小的数 20

第二次选择最小的数 43

第三次选择最小的数 70

第四次选择最小的数85

第五次选择最小的数88

第六次选择最小的数99

用大O表示法  O (n的平方)  这里的数有6个  正常来讲的 是  36次  

而这里没有严格的按照这个来  次数是 6 + 5 + 4 + 3 + 2 + 1次 运行的次数为 6*1/2*7    n*1/2*(n+1)

平均检查的元素为(n+1)/2

  let score = [99, 85, 43, 70, 20, 88];//一个分数的集合

    function getMin(list) {
        var min = list[0];//设置最小的数
        var minIndex = 0;//设置最小数的下标
        for (let i = 0; i < list.length; i++) {//循环6次
            let item = list[i];
            if (item <= min) { //如果比这个默认值小  最小数就是谁
                min = item;
                minIndex = i;
            }
        }
        return  minIndex;//返回返回值  用下标好一点 因为可以根据下标删除
    }


    function  search(list){
        var  newList = [];
        for(var i=0;i<list.length;i++){
            let minIndex = getMin(list);
            //找到最小值  并且从集合中删除  放入到新的集合中
            newList.push(...list.splice(minIndex,1));
            i--;//删除以后 每次都从0开始
        }
        return  newList;
    }

运行结果

额外补充  这种数组操作 还有另外一种 链表

数组的 查询 读取速度快

链表的删除和新增块

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值