Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 01:38   #1
Olright
 
Регистрация: 29.05.2011
Сообщений: 8
По умолчанию Сортировка двумерного массива

В общем, я студент первого курса и задача такая:
Нужно отсортировать двумерный массив по возрастанию. Каким методом не имеет значения. Отсортировать отдельно по столбцам или строкам получилось, а нужно, кажется, весь массив (от начала до конца). Но есть одно условие - нельзя вводить дополнительный массив, тоесть развернуть в одномерный, отстортировать и снова свернуть нельзя, хотел бы узнать, есть ли другие способы это сделать? Код можно не писать, лучше словами - хочу сам понять, что нужно написать для этого. Заранее благодарен
p.s. на языке delphi

Последний раз редактировалось Olright; 29.05.2011 в 02:00.
Olright вне форума Ответить с цитированием
Старый 29.05.2011, 01:42   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

А где у двумерного массива начало и конец?
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 29.05.2011, 01:44   #3
Olright
 
Регистрация: 29.05.2011
Сообщений: 8
По умолчанию

При генерации задается MxN тоесть размер всегда разный
p.s а если я не правильно вас понял то в [1,1] начало, а в [m,n] конец

Последний раз редактировалось Olright; 29.05.2011 в 01:46. Причина: добавил немного инфы
Olright вне форума Ответить с цитированием
Старый 29.05.2011, 01:53   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

исходя из того что массивы любой мерности хранятся в памяти в последовательных ячейках, подойдет обычный qsort
Код:
	int arr[4][4]={3,4,5,1,6,7,8,9,5,4,3,4,8,9,7,3};

	for (int i=0; i<4; i++) {
		for (int j=0; j<4; j++) {
			std::cout << arr[i][j] << ' ';
		}
		std::cout << '\n';
	}

	std::cout << '\n';

	qsort(&arr[0][0],16,sizeof(arr[0][0]),cmp);

	for (int i=0; i<4; i++) {
		for (int j=0; j<4; j++) {
			std::cout << arr[i][j] << ' ';
		}
		std::cout << '\n';
	}
пример на С
onewho вне форума Ответить с цитированием
Старый 29.05.2011, 01:57   #5
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Сортировка всегда подразумевает начало и конец. У таблицы (он же массив двумерный) нет чёткого определения начала и конца.

Можно отсортировать:
1. Строки.
2. Столбцы.
3. Рулетиком.
4. Обратным рулетиком.
5. По диагоналям
6. и т.д.

Тоесть "сортировать двумерный массив" можно хз сколькими способами. Поэтому задание требует уточнения.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 29.05.2011, 02:01   #6
Olright
 
Регистрация: 29.05.2011
Сообщений: 8
По умолчанию

Нужно отсортировать по столбцам
Olright вне форума Ответить с цитированием
Старый 29.05.2011, 02:07   #7
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Ок.

Отсортировать столбцы двумерного массива по убыванию.

Ты сказал что сделал "сортировка столбца", показывай.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 29.05.2011, 02:22   #8
Olright
 
Регистрация: 29.05.2011
Сообщений: 8
По умолчанию

rg1 - RadioGroup
e5-e8 - эдиты
0 - сортировка вставками
1 - пока не сделал, там будет шейкер
Цитата:
procedure TForm1.Button2Click(Sender: TObject);
var r,e,t:integer;
begin
if (length(e5.text)<5)and(length(e7.te xt)<5)and(length(e6.text)<5)and(len gth(e8.text)<5) then
if (strtoint(e5.text)<=strtoint(e6.tex t))and(strtoint(e6.text)<=strtoint( e8.text))then
begin
k:=strtoint(e5.text);
l:=strtoint(e6.text);
c:=strtoint(e7.text);
d:=strtoint(e8.text);
case rg1.ItemIndex of
0:begin
for i:=k to c do
begin
e:=d;
while e>1 do
begin
t:=l;
for j:=l+1 to e do
if q[i,j]>q[i,t] then t:=j;
r:=q[i,t];

q[i,t]:=q[i,e];
q[i,e]:=r;
e:=e-1;
end;
end;
end;
1:begin
end;
end;
for i:=k to c do
for j:=l to d do
sg1.Cells[i-1,j-1]:=inttostr(q[i,j]);
end;
end;
Olright вне форума Ответить с цитированием
Старый 29.05.2011, 02:40   #9
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Каким компонентом массив задаётся?
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 29.05.2011, 02:51   #10
Olright
 
Регистрация: 29.05.2011
Сообщений: 8
По умолчанию

q
sg1- stringgrid1
Olright вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного массива Makarov Помощь студентам 8 29.10.2011 11:55
Сортировка двумерного массива MIKE11IPME Microsoft Office Excel 8 17.04.2011 20:56
Сортировка двумерного массива в С(Си) savra Помощь студентам 5 26.11.2009 10:47
Сортировка двумерного массива Dwaight$ Помощь студентам 1 27.05.2009 03:14