冒泡排序【双层for循环 一层减一次 里层减外层 变量相交换】

本文讲解如何使用Python通过双层for循环对数组进行从小到大的排序,强调了避免数据丢失并提供了一种解决方案。通过示例展示了如何逐步交换元素以达到排序目标。

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

目标 : 排序 ;

排序规则 :

- 两两比较,不符合规则就换位;

规则 :是 从小到大 , 还是 从大到小;

- 从小到大 : 左小右

var arr = [ 2 , 3 , 4 ] 

- 从大到小 : 左大右

var arr = [ 4 , 3 , 2 ] 

规则 : 从小到大

  var arr = [1.8 1.7 1.9 0.9 1.4 1.2]
            比较 : 1.8 和 1.7 不符合规则 
            比较下标 : 0 1 
            1.7 1.8 1.9 0.9 1.4 1.2 
            比较 : 1.8 和 1.9 符合规则; 
            比较下标 : 1 2 
            1.7 1.8 1.9 0.9 1.4 1.2 
            比较 : 1.9 和 0.9 不合规则; 
            比较下标 : 2 3 
            1.7 1.8  0.9 1.9 1.4 1.2 
            比较 : 1.9 和 1.4 不合规则; 
            比较下标 : 3 4 
            1.7 1.8  0.9  1.4 1.9  1.2 
            比较 : 1.9 和 1.1 不合规则; 
            比较下标 : 4 5 
            1.7 1.8  0.9  1.4 1.2 1.9  

一轮比较之后一定会把最大的放在数组最后方

把最大值放在最后的写法 :

- 比较四次 ;

- 规则是从小到大排列;

var arr = [ 4 , 5 , 1 , 3 , 2 ] ;

数组项换位 :

- 这种数组的换位方式会导致第一次被赋值的数组项数据丢失;

arr[0] = arr[1];
arr[1] = arr[0];

- 解决方案 : 存储一下会被覆盖的数据;

 var temp = arr[0];
   arr[0] = arr[1];
   arr[1] = temp;
 var arr = [ 4 , 5 , 1 , 3 , 2 ] ;
            //两两比对次数 : 数组项数 - 1 次; 
            for(var i = 0 ; i < arr.length - 1 - 0 ; i ++){
                  // 从小到大; 
                  if( arr[i] > arr [ i + 1 ]){
                        var temp = arr[ i ];
                        arr[ i ] = arr[ i + 1 ];
                        arr[ i + 1 ] = temp;
                  }
            }

            // 为什么再次 -1 因为我们已经排列好了一个数值了; 
            // 不需要再次排列了; 
            for(var i = 0 ; i < arr.length - 1 - 1 ; i ++){
                  // 从小到大; 
                  if( arr[i] > arr [ i + 1 ]){
                        var temp = arr[ i ];
                        arr[ i ] = arr[ i + 1 ];
                        arr[ i + 1 ] = temp;
                  }
            }

            for(var i = 0 ; i < arr.length - 1 - 2 ; i ++){
                  // 从小到大; 
                  if( arr[i] > arr [ i + 1 ]){
                        var temp = arr[ i ];
                        arr[ i ] = arr[ i + 1 ];
                        arr[ i + 1 ] = temp;
                  }
            }

            for(var i = 0 ; i < arr.length - 1 - 3 ; i ++){
                  // 从小到大; 
                  if( arr[i] > arr [ i + 1 ]){
                        var temp = arr[ i ];
                        arr[ i ] = arr[ i + 1 ];
                        arr[ i + 1 ] = temp;
                  }
            }

            console.log( arr );

            for(var k = 0 ; k < arr.length - 1 ; k ++){
                  for(var i = 0 ; i < arr.length - 1 - k ; i ++){
                        // 从小到大; 
                        if( arr[i] > arr [ i + 1 ]){
                              var temp = arr[ i ];
                              arr[ i ] = arr[ i + 1 ];
                              arr[ i + 1 ] = temp;
                        }
                  }
            }
            console.log( arr);
 var arr = [ 4 , 5 , 1 , 3 , 2 ] ;
 for(var k = 0 ; k < arr.length - 1 ; k ++){
                  for(var i = 0 ; i < arr.length - 1 - k ; i ++){
                        // 从小到大; 
                        if( arr[i] > arr [ i + 1 ]){
                              var temp = arr[ i ];
                              arr[ i ] = arr[ i + 1 ];
                              arr[ i + 1 ] = temp;
                        }
                  }
            }
            console.log( arr);



// 【双层for循环 一层减一次 里层减外层 变量相交换】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chengxy鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值