关于冒泡排序和选择排序

冒泡排序:

主要思想:两两进行比较+值交换,像冒泡一样

以下为我的思路:

        关于冒泡排序:(以升序为例子)

        从第一个开始,相邻的两个数进行比较

        若第一个大一第二个,则进行交换

        以此类推、、、、、

        从上面我们不难看出,冒泡排序其实就是一个双层for循环

        冒泡排序的外层循环控制的是需要进行冒泡的次数,关于如何确定冒泡的次数,当我们数组一共有n项时,那我们就有n-1项需要去进行冒泡。最后一项不需要进行冒泡。

        内层循环是控制在一个冒泡周期内,需要进行的比较次数,还是当我们的数组有n项,当我们的第一项开始排序时,他需要和n-1项进行比较,第二项需要和n-2项进行比较。。。。以此类推。

        
       function maopao(arr) {
            let len = arr.length;
            let temp = 0;
            // 外层循环表示冒泡次数
            for (let i = 0; i < len - 1; i++) {
                //内层循环表示比较次数
                for (let j = 0; j < len - 1 - i; j++) {
                    // 判断,相邻的两个数进行比较,
                    // 若要改变排列的顺序,只需改变判断条件的大于和小于号即可
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }

            }
            return arr;
        }
        // 降序排列
        function maopaojiangxu(arr) {
            let len = arr.length;
            for (let i = 0; i < len - 1; i++) {
                for (let j = 0; j < len - 1 - i; j++) {
                    if (arr[j] < arr[j + 1]) {
                        let temp = 0;
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }

            }
            return arr;
        }
        
        // 打印数组函数
        function pointarr(arr) {
            let len = arr.length;
            for (let i = 0; i < len; i++) {
                document.write(arr[i] + '  ');
            }
        }
        let arr1 = [89, 23, 56, 87, 54, 12, 99, 76, 34, 22]
        console.log(maopao(arr1));
        pointarr(maopao(arr1));
        document.write('<br>');
        console.log(maopaojiangxu(arr1));
        pointarr(maopaojiangxu(arr1));

输出的结果为:

关于如何该改变排序方向,我们只需要在判断的时候更改一下'>'或'<'

选择排序

    选择排序思想:直接选出最大或最小然后依次排列。

            首先在数组中选择最小的数与第一个进行交换

            已经确定了数组的第一个元素,然后剩下的数组元素中寻找最小的数与第二个数进行交换

            以此类推。。。进行排列

            如需要改变排序方式秩序哟改变内层循环的判断即可。

 

function xuanze(arr) {
            var len = arr.length;
            // 外层循环控制
            for (let i = 0; i < len; i++) {
                // let temp = arr[i];
                let min = i;
                for (let j = i; j < len; j++) {
                    //寻找数组的最小元素并记录最小数字的下标
                    if (arr[min] > arr[j]) {
                        min = j;
                    }
                }
                // 进行交换
                // 方法一
                [arr[i], arr[min]] = [arr[min], arr[i]];
                // 方法二
                // arr[i] = arr[min];
                // arr[min] = temp;
            }
            return arr;
        }

        function pointarr(arr) {
            for (let a = 0; a < arr.length; a++) {
                document.write(arr[a] + '  ');
            }
        }
        let arr1 = [89, 23, 56, 87, 54, 12, 99, 76, 34, 22]
        console.log(xuanze(arr1));
        pointarr(xuanze(arr1));

输出结果为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值