17.02.2014, 01:47
|
|
Интересующийся
|
|
Регистрация: 15.02.2014
Сообщений: 19
|
|
Подскажите по сортировке массива
есть код
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'));
Подскажите как его переделать чтобы сортировать по строкам и по всему массиву.
|
|
17.02.2014, 04:33
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
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'));
|
|
17.02.2014, 11:05
|
|
Интересующийся
|
|
Регистрация: 15.02.2014
Сообщений: 19
|
|
рони,
А если нужно привести массив в вид:
11122
22223
33444
55668
89999
то нужно его превратить в одномерный, отсортировать и собрать обратно в двумерный
|
|
17.02.2014, 11:26
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
Сообщение от 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
};
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'));
|
|
17.02.2014, 13:43
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Если использовать 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'));
__________________
В личку только с интересными предложениями
|
|
17.02.2014, 13:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
danik.js,
без встроенных функций сортировки иначе зачем огород
|
|
17.02.2014, 13:52
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
рони, а где это сказано в условии? А огород от незнания. Вон народ по старой памяти document.all юзает еще ))
__________________
В личку только с интересными предложениями
|
|
17.02.2014, 14:00
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
Сообщение от danik.js
|
рони, а где это сказано в условии?
|
ТС забыл уточнить.
|
|
17.02.2014, 17:01
|
|
Интересующийся
|
|
Регистрация: 15.02.2014
Сообщений: 19
|
|
Да сорри забыл уточнить sort низя использовать
|
|
17.02.2014, 17:28
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от NuclleaR
|
sort низя использовать
|
Это потому что он быстрей чем самописная функция? Или что ES5? Дык эту кастомную sort можно писать в прототип при отсутствии нативной.
Или типа из академического интереса? Дык тогда и concat как-бы нельзя использовать. И splice тоже.
__________________
В личку только с интересными предложениями
|
|
|
|