冒泡排序+选择排序+数组去重

冒泡排序:

遍历所有元素(从小到大排序),依次比较相邻的两个元素(小的放前面,大的放后面)效率很低
动态图如下所示:
在这里插入图片描述
代码示例:

var arr = [10,18,1,6,9,20,7,90];

        for(var i = 0; i <= arr.length - 1; i++){
            for( var j = 0; j <= arr.length - 1 - 1 - i; j++){
                // 第二个1 最后一个和前一个比较过了 没必要在比一次
                // -i 外层循环执行了几次说明已经有几位已经排好序了  没必要在排序了
                if( arr[j] > arr[j+1]){
                    var m;
                    m = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = m;
                }
            }
        }
        console.log(arr);

运行结果如下:
在这里插入图片描述

选择排序:

先找到所有元素中的最小值,然后将他存储的索引和起始索引交换位置,再从剩下的元素中找最小值,将它的索引与已排好的下一位索引交换位置,一次循环,将所有的元素从小到大排序 效率比冒泡排序高
动态图如下所示:
在这里插入图片描述
代码示例:

var arr = [10,18,1,6,9,20,7,90];
    
    console.log(arr);
    for( var j = 0; j <= arr.length - 1 - 1; j++){
        // 第二个1 最开始的不用跟自己比较
        var min = j;
        for( var i = j + 1; i <= arr.length - 1; i++){
            if(arr[min] > arr[i]){
                min = i;
            }
        }
        if(min != j){
            var m;
            m = arr[j];
            arr[j] = arr[min];
            arr[min] = m;
        }
        
    }
    console.log(arr);

运行结果:
在这里插入图片描述

数组去重方法之indexOf():

目前只学习了indexOf这种去重方法,所有我就只写了这一种

// 新建数组
        var arr = ['红','红','火','火','恍','恍','惚','惚','哈','哈','嘿','嘿',2,2,4,4,null,null];
        console.log(arr);
        // 新创建一个空数组来存储原始数组中的不重复数据
        var arr1 = [];
        // 循环遍历,获取原始数组中的所有数据
        arr.forEach(function(val){
            // 如果arr1.indexOf(val)的执行结果如果是-1(全等)说明新数组中没有原始数组的数据
            if(arr1.indexOf(val) === -1){
            // 将这个数据,写入到新数组中
            arr1.push(val);
            }
        })

        console.log(arr1);


        // 新创建一个空字符串来存储原始数组中的不重复数据
        var arr2 = '';
        // 循环遍历,获取原始数组中的所有数据
        for(var key in arr){
            
            // 如果arr2.indexOf(arr[key])的执行结果如果是-1(全等)说明新字符串中没有原始数组的数据
            if(arr2.indexOf(arr[key]) === -1){
                // 执行字符串拼接操作,将这个数据拼接到新的字符串中
                arr2 += arr[key];
            }
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值