如何使用气泡排序在 Javascript 中对 2D 数组进行排序

How to sort a 2D array in Javascript using bubble sort

本文关键字:排序 数组 2D 中对 Javascript 何使用 气泡      更新时间:2023-09-26

这是我的函数,需要帮助使其与 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; 
        }
     }
  }        

}

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

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);

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

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

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]

]