冒泡排序和ES5常用的方法

数组的排序

冒泡排序

  • 先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,那么就把两个换个位置
  • 数组遍历一遍以后,那么最后一个数字就是最大的那个了
  • 然后进行第二遍的遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置
  • 以此类推,最后就会按照顺序把数组排好了
  • 规则:前后两个数两两进行比较,如果符合交换条件,就交换两数的位置。
  •         特殊:每一轮比较完成以后,都会找到一个较大的数,放在正确的位置。
    
    
     
         第一轮:五次
             9, 8, 7, 6, 5, 4
             8, 9, 7, 6, 5, 4
             8, 7, 9, 6, 5, 4
             8, 7, 6, 9, 5, 4
             8, 7, 6, 5, 9, 4
             8, 7, 6, 5, 4, 9
    
         第二轮:四次
             8, 7, 6, 5, 4
             7, 8, 6, 5, 4
             7, 6, 8, 5, 4
             7, 6, 5, 8, 4
             7, 6, 5, 4, 8
    
         第三轮:三次
             7, 6, 5, 4
             6, 7, 5, 4
             6, 5, 7, 4
             6, 5, 4, 7
    
         第四轮:两次
             6, 5, 4
             5, 6, 4
             5, 4, 6
    
         第五轮:一次
             5, 4
             4, 5
    
         每一轮比较的次数 = 数组长度 - (当前轮数 + 1)
     
    
     var arr = [9, 8, 7, 6, 5, 4];
    
     for(var i = 0; i < arr.length - 1; i++){
         for(var j = 0; j < arr.length - (i + 1); j++){
             //前后两两进行比较
             if(arr[j] > arr[j + 1]){
                 var tmp = arr[j];
                 arr[j] = arr[j + 1];
                 arr[j + 1] = tmp;
             }
         }
     }
    
     console.log(arr);
    

选择排序

选择排序:打擂台法

规律:选出一个位置,和后面所有的数,进行比较,如果,符合条件就直接交换位置。

特点:每一次都找出一个较小的数,放在正确的位置。

            第一轮:
                9, 8, 7, 6, 5, 4
                8, 9, 7, 6, 5, 4
                7, 9, 8, 6, 5, 4
                6, 9, 8, 7, 5, 4
                5, 9, 8, 7, 6, 4
                4, 9, 8, 7, 6, 5

            第二轮:
                   9, 8, 7, 6, 5
                   8, 9, 7, 6, 5
                   7, 9, 8, 6, 5
                   6, 9, 8, 7, 5
                   5, 9, 8, 7, 6

            第三轮:
                      9, 8, 7, 6
                      8, 9, 7, 6
                      7, 9, 8, 6
                      6, 9, 8, 7

            第四轮:
                         9, 8, 7
                         8, 9, 7
                         7, 9, 8

            第五轮:
                             9, 8
                             8, 9


        
        var arr = [9, 8, 7, 6, 5, 4];

        for(var i = 0; i < arr.length - 1; i++){
            for(var j = i + 1; j < arr.length; j++){
                if(arr[i] > arr[j]){
                    var tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }

        console.log(arr);

快速排序

快速排序/分治法

先找一个基准数

function num(arr){
                // 如果只有一个数就直接输出此数字
                if(arr.length <= 1){
                    return arr;
                }
                // 找到基数
                var index = parseInt(arr / 2);
                // 把基数拿出来
                var aba = arr.splice(index,1);
                // 设置左右两个空值
                var left = [];
                var right = [];
                
                for(var a = 0 ; a < arr.length;a++){
                // 如果小于则给左边盒子插入
                    if(arr[a] < aba){
                        left.push(arr[a])
                    }
                // 如果大于则给右边盒子插入

                    else{
                        right.push(arr[a])
                    }
                }
                // 返回值:给左边加基数和右边的数组
                return num(left).concat(aba,num(right))
            }
            var ttt = num(arr);
            console.log(ttt);

ES5

indexOf

Array.indexOf()
                格式:数组.indexOf(item, start);
                【注】start不传入,默认从0开始查找。
                功能:在数组中查找item,从start开始第一次出现的下标。
                返回值:如果能查找的到,返回查找到的下标,否则,返回-1

forEach

arr.forEach(function(item, index, array){
                item 是当前遍历到的元素
                index是当前遍历到的元素的下标
                array数组本身

                console.log(item, index, array);
            })

map

Array.map()
                功能:映射
                映射关系:写在函数的return部分。
                返回值:生成一个映射关系生成的新数组
            
            让上述数组中每一个元素,增加30%
            
            var newArr = arr.map(function(item, index, array){
                return item * 1.3;
            })

            console.log(newArr);
            console.log(arr);

filter

Array.filter()
                功能:过滤
                过滤条件:return后面的表达式
            
            var newArr = arr.filter(function(item, index, array){
                return item > 30;
            })

            console.log(newArr);
            console.log(arr);

every

Array.every()
                功能:判断数组中的每一个元素,是否都符合条件
                返回值:如果是,返回true, 否则false
                判断条件:return后面的表达式
                【注】短路操作
            
            var res = arr.every(function(item, index, array){
                console.log(item, index, array);
                return item < 300;
            })

            console.log(res);
            console.log(arr);

some

 Array.some()
                功能:判断数组中的有一个元素,是否符合条件
                返回值:如果是,返回true, 否则false
                判断条件:return后面的表达式
                【注】短路操作
           
            var res = arr.some(function(item, index, array){
                console.log(item, index, array);
                return item > 300;
            })

            console.log(res);
            console.log(arr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值