Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2014, 01:47
Аватар для NuclleaR
Интересующийся
Отправить личное сообщение для NuclleaR Посмотреть профиль Найти все сообщения от NuclleaR
 
Регистрация: 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'));


Подскажите как его переделать чтобы сортировать по строкам и по всему массиву.
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2014, 04:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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'));
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2014, 11:05
Аватар для NuclleaR
Интересующийся
Отправить личное сообщение для NuclleaR Посмотреть профиль Найти все сообщения от NuclleaR
 
Регистрация: 15.02.2014
Сообщений: 19

рони,
А если нужно привести массив в вид:
11122
22223
33444
55668
89999

то нужно его превратить в одномерный, отсортировать и собрать обратно в двумерный
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2014, 11:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от 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'));
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2014, 13:43
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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'));
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2014, 13:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

danik.js,
без встроенных функций сортировки иначе зачем огород
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2014, 13:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

рони, а где это сказано в условии? А огород от незнания. Вон народ по старой памяти document.all юзает еще ))
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 17.02.2014, 14:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от danik.js
рони, а где это сказано в условии?
ТС забыл уточнить.
Ответить с цитированием
  #9 (permalink)  
Старый 17.02.2014, 17:01
Аватар для NuclleaR
Интересующийся
Отправить личное сообщение для NuclleaR Посмотреть профиль Найти все сообщения от NuclleaR
 
Регистрация: 15.02.2014
Сообщений: 19

Да сорри забыл уточнить sort низя использовать
Ответить с цитированием
  #10 (permalink)  
Старый 17.02.2014, 17:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от NuclleaR
sort низя использовать
Это потому что он быстрей чем самописная функция? Или что ES5? Дык эту кастомную sort можно писать в прототип при отсутствии нативной.
Или типа из академического интереса? Дык тогда и concat как-бы нельзя использовать. И splice тоже.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива по возрастанию другого массива. vas88811 Events/DOM/Window 4 12.01.2014 10:31
Перебор массива - вложенный цикл SWin Общие вопросы Javascript 35 27.12.2013 05:06
Замена элементов массива элементами массива prostoix Javascript под браузер 4 24.10.2013 17:36
Подскажите как достать значение из асс. массива posta Серверные языки и технологии 7 25.11.2012 00:38
вставка элементов массива в текстовую форму по клику olezyk Общие вопросы Javascript 3 21.03.2009 22:01