Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сортировка двумерного массива методом пузырька (https://javascript.ru/forum/misc/29409-sortirovka-dvumernogo-massiva-metodom-puzyrka.html)

lammeR 26.06.2012 19:25

Сортировка двумерного массива методом пузырька
 
Привет всем! Помогите с сортировкой двумерного массива. Сортирует неправильно.
var arr=new Array(); 
for(var i=0;i<10;i++){
	arr[i]=[];
	for(var j=0; j<10;j++){
		arr[i][j]=Math.floor(Math.random()*100)+1;
	}
}
var len=arr.length*arr.length;
	for(var c=0;c<len;c++){
			
		for(var i=0; i<arr.length; i++){
			
			for(var j=0;j<arr.length-1;j++) {
				
				if(arr[i][j]>arr[i][j+1]) {
					var p=arr[i][j];
					arr[i][j]=arr[i][j+1];
					arr[i][j+1]=p;
				}
	   		}
		}
			
	}

ksa 26.06.2012 19:27

Цитата:

Сообщение от lammeR
Помогите с сортировкой двумерного массива

И как предполагается его сортировать? Т.е. какой будет принцип сортировки?

lammeR 26.06.2012 19:29

ksa,
Пузырьковой сортировкой, я в названии темы указал

tadjik1 26.06.2012 19:30

а чем вам .sort() не нравится? замечательно ведь сортирует, правда методом «быстрой сортировки»

ksa 26.06.2012 19:31

lammeR, вспомнился стариный анекдот...

- Бойцы! На танке поломалась рация... Кто может починить?
- А рация на лампах или транзисторах?
- Для особо тупых повторяю... Рация на ТАНКЕ!!!

ksa 26.06.2012 19:32

Цитата:

Сообщение от tadjik1
а чем вам .sort() не нравится?

Она работает с одномерными массивами... :)

lammeR 26.06.2012 19:32

tadjik1, ну я хотел бы сам алгоритм написать, но не осилил.)

Deff 26.06.2012 19:34

Цитата:

Сообщение от lammeR
len=arr.length*arr.length;

А откель это и что означает ?

lammeR 26.06.2012 19:35

tadjik1, ДВУМЕРНЫЙ массив

nerv_ 26.06.2012 19:36

lammeR, в js все массивы имеют одно измерение - параллельное :D

tadjik1 26.06.2012 19:37

стоп, а как вы хотите-то отсортировать этот массив?

var a = [[1, 2], [2, 3], [1, 3], [3,2], [2, 1]];


чему должна равняться a после сортировки?

nerv_ 26.06.2012 19:39

Цитата:

Сообщение от tadjik1
чему должна равняться a после сортировки?

a после сортировки, как и до, будет "равняться" массиву )

lammeR 26.06.2012 19:39

5, 1, 4
2, 8, 3
9, 6, 7

по возрастанию
1 ,2 ,3
4, 5, 6
7, 8, 9

tadjik1 26.06.2012 19:43

Цитата:

Сообщение от nerv_
a после сортировки, как и до, будет "равняться" массиву )

ну вы же поняли)))

lammeR,
чего это такое?) задача в том, чтобы из двумерного массива сделать одномерный, отсортировать и снова привести к двумерному?

а если у вас будет
var arr = [[1, 3], [4, 5, 1 ,3, 5], [2, 5, 6]];

как вы его хотите отсортировать?

ksa 26.06.2012 19:46

Цитата:

Сообщение от tadjik1
задача в том, чтобы из двумерного массива сделать одномерный, отсортировать и снова привести к двумерному?

Получается именно так. :yes:

lammeR 26.06.2012 20:07

tadjik1, не знаю, что вы имеете ввиду, есть двумерный массив 10x10, заполненный случайными элементами, необходимо отсортировать двумерный массив по возрастанию и вывести этот же массив уже с отсортированными элементами.

ksa 26.06.2012 20:11

lammeR, если тебе его нужно сортировать как одномерный - таки запиши его в одномерный, отсортируй...
А потом запиши обратно в 2-хмерный и выведи его.

lammeR 26.06.2012 20:13

ksa, а нельзя ли это сделать без помощи одномерного, всю сортировку произвести с двумерным?

Deff 26.06.2012 20:16

lammeR,
Ну ksa, логично сказал - превратить 10х10 в массив 100, отсортировать и вложить заново в 10 по 10, результат будет идентичен с сортировкой иным методом

tadjik1 26.06.2012 20:17

var arr = [[1, 2, 3], [2, 4, 5], [1, 5, 7], [5, 3, 7]], //исходный массив
b = arr.join().split(',').sort(function(a, b) { return a - b }), //приводим исходный к одномерному, сортируем
newarr = []; 

for(var i = 0; i < arr.length; i++){ newarr[i] = b.splice(0, arr[0].length) } //заполняем новый массив

alert(JSON.stringify(newarr));


в javascript вообще нет поняти «многомерный массив» =)

ksa 26.06.2012 20:19

Цитата:

Сообщение от lammeR
а нельзя ли это сделать без помощи одномерного, всю сортировку произвести с двумерным?

- Тебя сразу убить? Или желаешь помучаться?
- Оно конечно лучше помучаться...
(с) к/ф Белое солнце пустыни :)

ksa 26.06.2012 20:21

Цитата:

Сообщение от tadjik1
в javascript вообще нет поняти «многомерный массив» =)

Эва! :blink:
http://learn.javascript.ru/array#многомерные-массивы

tadjik1 26.06.2012 20:24

мне казалось, что в других языках это что-то большее, чем просто «массив массивов». так-то да, чем не многомерный)

ksa 26.06.2012 20:27

Цитата:

Сообщение от tadjik1
в других языках это что-то большее

Например на COS вообще всё массивы... :D Т.е. ничего даже обявлять не нужно...
Просто пишешь

set a(1,2,3,4,"Вася")="Пример"

:)

nerv_ 26.06.2012 20:56

Цитата:

Сообщение от tadjik1
мне казалось, что в других языках это что-то большее, чем просто «массив массивов». так-то да, чем не многомерный)

мне тоже ) Походу дела мы с тобой ламеры :)
Здесь написано обратное:
Цитата:

Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером — число строк и столбцов (mxn) в каждой размерности массива.
Кто нибудь внесите ясность, двумерный массив - это тот, который содержит два измерения? А то, что по этой ссылке Многомерные массивы называется массив массивов.

Deff 26.06.2012 21:12

nerv_,
Мну имхо думает, что слова все лишь попытка отражения чего то...

К примеру для построения объемной модели куска поверхности тела нужон трехмерный массив, координаты на плоскости и высота данной точки над оной
как они обзовутся в конкретном приложении - не суть, главное - удобное оперирование, не затемняющее смысла задачи

ksa 27.06.2012 13:14

Цитата:

Сообщение от nerv_
Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером — число строк и столбцов (mxn) в каждой размерности массива.

Я бы перешел от строк и столбцов просто к количеству индексов... Поскольку это точно всречается во всех эпостасях массивов, применительно к языкам программирования.
Пример на JS
// элемент одномерного массива
a[5]
// элемент двухмерного массива
a[2][6]
// элемент четырехмерного массива
a[1][2][3][4]

Т.е. определим размерность массива как "максимально возможное" количество его индексов, которое можно использовать для получения значений, хранящихся в оном массиве... :)

nerv_ 27.06.2012 22:20

Deff, спасибо за мнение.

ksa, и Вас благодарю.
Цитата:

Сообщение от ksa
Я бы перешел от строк и столбцов просто к количеству индексов... Поскольку это точно всречается во всех эпостасях массивов, применительно к языкам программирования.

Тут в другом затык - что мы понимаем под двумерным массивом?

Вы говорите, что это двумерный массив это
// элемент двухмерного массива
a[2][6]

я, что двумерный массив
// элемент двухмерного массива
a[2, 6]

а то, что привели Вы это массив массивов. Кто прав? )

ksa 28.06.2012 09:11

Цитата:

Сообщение от nerv_ (Сообщение 184685)
Вы говорите, что это двумерный массив это
// элемент двухмерного массива
a[2][6]

я, что двумерный массив
// элемент двухмерного массива
a[2, 6]

Это всего лишь синтаксис некоего языка программирования... :)

Цитата:

Сообщение от nerv_ (Сообщение 184685)
а то, что привели Вы это массив массивов. Кто прав? )

Вспомнился старый анекдот...
Спорят двое... Прийти к соглашению никак не получается... Третий предложил обратиться к мудрецу:
- Скажи, мудрейший, кто из тех двух прав?
Мудрец выслушал первого... И сказал?
- Да, ты прав.
Выслушал второго... И сказал:
- Да, ты прав.
Но тут возмутился третий!
- Ну как же так! Не могут же оба быть правы!!!
- И ты прав... :yes:

nerv_ 29.06.2012 13:58

ksa, я бы успокоился на
Цитата:

Сообщение от Deff
как они обзовутся в конкретном приложении - не суть, главное - удобное оперирование, не затемняющее смысла задачи

Загвоздка в том, что в языке программирования (не js), встречаются оба типа записи
a[2][6]
a[2, 6]

и значат они совершенно разное. Как мне передать человеку свою мысль, если мы одним и тем же термином называем разные вещи? Мы просто будем путать друг друга. Не? )

Deff 29.06.2012 14:03

Цитата:

Сообщение от nerv_
. Как мне передать человеку свою мысль, если мы одним и тем же термином называем разные вещи? Мы просто будем путать друг друга. Не? )

:) В виде Вами представленной строки
Имхо все жа первый - двумерный массив элементов двумерной матрицы - *что уже однозначней
Второй массив - из двух значений или длиной равной двум

nerv_ 01.07.2012 20:48

Цитата:

Сообщение от Deff
В виде Вами представленной строки

Ok. Допустим, я даю ему такую строку
a[1, 6]

и он ее понимает, как
Цитата:

Сообщение от Deff
массив - из двух значений или длиной равной двум

хотя на самом деле
// array = a[1][6]
		
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[0][3] = 4;
a[0][4] = 4;
a[0][5] = 6;
a[0][6] = 7;
a[1][0] = 8;
a[1][1] = 9;
// ... a[1][6]

// or

// array = a[1, 6]

a[0, 0] = 1;
a[0, 1] = 2;
a[0, 2] = 3;
a[0, 3] = 4;
a[0, 4] = 4;
a[0, 5] = 6;
a[0, 6] = 7;
a[1, 0] = 8;
a[1, 1] = 9;
// ... a[1, 6]

Наверно, дискуссия на этот счет бесполезна. Придется ориентироваться по контексту.


Часовой пояс GMT +3, время: 10:57.