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

时间:2016-02-01 22:44:59

标签: javascript arrays algorithm

这是我的功能,需要帮助使其适用于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; 
        }
     }
  }        

}

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

可能最好的解决方案是首先&#34;不要&#34;将嵌套数组放入一个平面数组中,对其进行排序,然后将值复制回嵌套数组中:

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]]