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