javascript - 冒泡排序问题???
伊谢尔伦
伊谢尔伦 2017-04-10 18:10:38
[JavaScript讨论组]
for(var r=1;r<my_data.length;r++){
               for(var i=0;i<my_data.length-r;i++){
                  if(my_data[i+1]!=undefined){
                    if(my_data[i].b_val>my_data[i+1].b_val){
                        my_data[i]=[my_data[i+1],my_data[i+1]=my_data[i]][0];
                    }                  
                  }
              }
          }

问一下这样写冒泡有什么错?
根据数组里对象的属性(b_val)排序 为什么会这样?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
伊谢尔伦

关键在于:js对象是按引用传递的。

// 原因分析:
// 此时,my_data[i+1] = my_data[i]改变了my_data[i+1]的引用;
// 然后,[my_data[i+1],my_data[i+1]=my_data[i]][0]取到的对象,是my_data[i]
my_data[i]=[my_data[i+1],my_data[i+1]=my_data[i]][0]

// 改进:使用一个中间变量
var tmp = my_data[i];
my_data[i] = my_data[i+1];
my_data[i+1] = tmp;

拍出可行版本冒泡排序:做了一点点优化。

function bubble( my_data ) {
  var length = my_data.length;
  var flag;
  for (var r = 0; r < length-1; r++) {  // r表示进行了多少趟
    flag = true;  // flag表示当前趟是否冒泡,true代表没有冒泡,当一趟排序后,没有冒泡就代表排好序了,就停止冒泡,立刻返回排序后的数组。
    for (var i = 0; i < length - r; i++) {
      if ( my_data[i].b_val > my_data[i+1].b_val ) {
        var tmp = my_data[i];
        my_data[i] = my_data[i+1];
        my_data[i+1] = tmp;
        flag = false;
        console.log(my_data);
      };
    };
    if ( flag ) {
      return my_data;
    };
  };
  return my_data;
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号