【问题标题】:How to sort a 2D array in Javascript using bubble sort如何使用冒泡排序在 Javascript 中对二维数组进行排序
【发布时间】:2016-02-01 22:44:59
【问题描述】:

这是我的功能,需要帮助使其与 2D 数组一起使用,所以当我通过时

[[39,43,32],[300,44,1]]

返回

[[1,32,39],[43,44,300]]

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

}

【问题讨论】:

  • 具体是什么不起作用?你能举例说明你得到的输出吗?
  • 你想要的输出基于什么逻辑?您想要的返回值不是冒泡排序的,您已经完全更改了数组的值。如果对子元素进行简单的冒泡排序,您将拥有[[32,39,43],[1,44,300]]

标签: javascript arrays algorithm


【解决方案1】:

对于您给出的解决方案的确切示例,可能只是连接两个子数组,对结果进行排序并将结果分成两个子数组。

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

var a = [ [39, 43, 32], [300, 44, 1] ];
var a2 = bubbleSort(a[0].concat(a[1]));
a[0] = a2.slice(0,3);
a[1] = a2.slice(3,6);

如果数组有很多条目,这会变得很慢。如果条目的长度不同,它也会失败。如果它们的长度不同,您需要先解析数组并将各个长度保存在第二个数组中,以便在最后正确分割结果。连接和排序是一样的。

【讨论】:

    【解决方案2】:

    可能最好的解决方案是首先将嵌套数组“取消嵌套”到一个平面数组中,对其进行排序,然后将值复制回嵌套数组中:

    function bubbleSortNested(items) {
      // create a flat copy of the nested items array
      var flat = [];
      for (var i = 0; i < items.length; i++) { 
        flat = flat.concat(items[i]);
      }
      // sort flat array
      for (var i = 0; i < flat.length; i++) { 
        for (var j = 0; j < (flat.length - i - 1); j++) { 
          if(flat[j] > flat[j+1]) {
            var tmp = flat[j];  
            flat[j] = flat[j+1]; 
            flat[j+1] = tmp; 
          }
        }
      }
      // copy sorted flat array back into original nested array  
      for (var i = items.length-1; i>=0; i--) { 
        items[i] = flat.slice(-items[i].length);
        flat.length -= items[i].length;
      }
      return items;
    }
    
    res = bubbleSortNested([ [39, 43, 32], [300, 44, 1] ]);
    console.log(res);
    

    输出:

    [[1,32,39],[43,44,300]]

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2010-12-23
      • 2020-06-26
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      相关资源
      最近更新 更多