Подскажите по сортировке массива
есть код
var arr=[],n , i, j, col, row, c, X; //---------------------------------------------------------------------------- for (col = 0; col<5; col++){ arr.push([]); for(row=0; row<5; row++){ var x=Math.round(Math.random()*100); arr[col].push(x); } } alert(arr.join('\n')); //---------------------------------------------------------------------------- n = arr.length; for ( i = 0; i < n-1; i++){ for( j = i+1; j < n; j++){ for ( c = 0; c < n; c++){ if(arr[j][c] < arr[i][c]){ X = arr[i][c]; arr[i][c]=arr[j][c]; arr[j][c]=X; } } } } alert(arr.join('\n')); Подскажите как его переделать чтобы сортировать по строкам и по всему массиву. |
NuclleaR,
сначала отсортировать содержимое строк потом строки между собой var arr=[],n , i, j, col, row, c, X; //---------------------------------------------------------------------------- for (col = 0; col<5; col++){ arr.push([]); for(row=0; row<5; row++){ var x=Math.round(Math.random()*5); arr[col].push(x); } } alert(arr.join('\n')); //---------------------------------------------------------------------------- function sort(a) { for (var b = 0; b < a.length - 1; b++) for (var c = b + 1; c < a.length; c++) { var e = a[c].length; if (e) for (var d = 0; d < e; d++) { if (a[c][d] != a[b][d]) { if (a[c][d] > a[b][d]) break; if (a[c][d] < a[b][d]) { e = a[b]; a[b] = a[c]; a[c] = e; break } } } else a[c] < a[b] && (e = a[b], a[b] = a[c], a[c] = e) } return a }; for (var i=0; i<arr.length; i++) { arr[i]=sort(arr[i]) } arr = sort(arr); alert(arr.join('\n')); |
рони,
А если нужно привести массив в вид: 11122 22223 33444 55668 89999 то нужно его превратить в одномерный, отсортировать и собрать обратно в двумерный |
Цитата:
var arr=[],n , i, j, col, row, c, X; //---------------------------------------------------------------------------- for (col = 0; col<5; col++){ arr.push([]); for(row=0; row<5; row++){ var x=Math.round(Math.random()*5); arr[col].push(x); } } alert(arr.join('\n')); //---------------------------------------------------------------------------- function sort(a) { for (var b = 0; b < a.length - 1; b++) for (var c = b + 1; c < a.length; c++) { var e = a[c].length; if (e) for (var d = 0; d < e; d++) { if (a[c][d] != a[b][d]) { if (a[c][d] > a[b][d]) break; if (a[c][d] < a[b][d]) { e = a[b]; a[b] = a[c]; a[c] = e; break } } } else a[c] < a[b] && (e = a[b], a[b] = a[c], a[c] = e) } return a }; var z = []; for (var i=0; i<arr.length; i++) { z = z.concat(arr[i]) } z = sort(z); for (var i=0; i<5; i++) { z.push(z.splice(0,5)) } alert(z.join('\n')); |
Если использовать ES5 функцию sort, то все проще:
var arr=[],n , i, j, col, row, c, X; //---------------------------------------------------------------------------- for (col = 0; col<5; col++){ arr.push([]); for(row=0; row<5; row++){ var x=Math.round(Math.random()*5); arr[col].push(x); } } alert(arr.join('\n')); //---------------------------------------------------------------------------- var flat = []; for (var i = 0; i < arr.length; i++) { flat = flat.concat(arr[i]); } var sorted = flat.sort(); var result = []; for (var i = 0; i < flat.length; i += 5) { result.push(sorted.slice(i, i + 5)); } alert(result.join('\n')); |
danik.js,
без встроенных функций сортировки иначе зачем огород |
рони, а где это сказано в условии? А огород от незнания. Вон народ по старой памяти document.all юзает еще ))
|
Цитата:
|
Да сорри забыл уточнить sort низя использовать:)
|
Цитата:
Или типа из академического интереса? Дык тогда и concat как-бы нельзя использовать. И splice тоже. |
Часовой пояс GMT +3, время: 22:25. |