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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2010, 20:48   #1
inquis
Новичок
Джуниор
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию сортировка методом "пузырька" по возрастанию

помогите пожалуйста решить эту задачу:

есть массив:
Код:
Type mass1=array[1..16] of string;
mass2=array[1..16] of real;
mass3=array[1..16] of real;

var
  Form1: TForm1;
  one:mass1=('À6ÃÒØ','À7ÃÒØ','À7ÃÒØ-ÒË','À7Ø','À9ÃÒØ-ÒË','À9Ø','ÇÒÑØ1-172',
'ÇÒÑØ1-195','ÇÒÑØ1-195ÒË','ÇÒÑØ-195','ÇÒÑØ-240','Ò12Ì3Á-195','Ò12Ì3Á-215',
'Ò12Ì3Á-240','Ò12Ì3Å-172','ÒÑ5Å-172');
  two:mass2=(280,265,250,520,230,420,505,400,355,485,420,660,545,660,625,500);
  three:mass3=(900,1600,1600,2300,300,3500,1200,1550,2100,1550,3000,1000,1300,2400,800,100);
  i,j,x:integer;
  n:array[1..16] of integer;
необходимо отсортировать его методом "пузырька" по возрастанию.
результат обработки (3 массива) вывести на форму.

Последний раз редактировалось Stilet; 20.04.2010 в 09:21.
inquis вне форума Ответить с цитированием
Старый 19.04.2010, 21:19   #2
inquis
Новичок
Джуниор
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию

необходимо обработать поочередно данные массивы с помошью процедуры
inquis вне форума Ответить с цитированием
Старый 19.04.2010, 23:37   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

это же простейший алгоритм сравнения двух соседних элементов и их перемещение!
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 20.04.2010, 08:50   #4
inquis
Новичок
Джуниор
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию

можете помочь?
inquis вне форума Ответить с цитированием
Старый 20.04.2010, 09:23   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Конечно:
http://www.programmersforum.ru/showthread.php?t=450
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.04.2010, 09:48   #6
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
procedure Sort(var A: TMass);
var
	i, j, m: Integer;
begin
	for i := 0 to N - 1 do begin
		for j := 0 to N - 2 do begin
			if A[j] > A[j + 1] then begin
				m := A[j];
				A[j] := A[j + 1];
				A[j + 1] := m;
			end;
		end;
	end;
end;
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 20.04.2010, 11:39   #7
inquis
Новичок
Джуниор
 
Регистрация: 19.04.2010
Сообщений: 4
По умолчанию

Код:
Type mass1=array[1..16] of string;
mass2=array[1..16] of integer;
mass3=array[1..16] of integer;

var
  Form1: TForm1;
  a:mass1=('À6ÃÒØ','À7ÃÒØ','À7ÃÒØ-ÒË','À7Ø','À9ÃÒØ-ÒË','À9Ø','ÇÒÑØ1-172','ÇÒÑØ1-195',
'ÇÒÑØ1-195ÒË','ÇÒÑØ-195','ÇÒÑØ-240','Ò12Ì3Á-195','Ò12Ì3Á-215','Ò12Ì3Á-240','Ò12Ì3Å-172','ÒÑ5Å-172');
  b:mass2=(280,265,250,520,230,420,505,400,355,485,420,660,545,660,625,500);
  c:mass3=(900,1600,1600,2300,300,3500,1200,1550,2100,1550,3000,1000,1300,2400,800,100);
  i,j,x,k:integer;
  n:array[1..16] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 16 do
begin
F1Book1.NumberRC[i+1,1]:=i;
F1Book1.TextRC[i+1,2]:=a[i];
F1Book1.NumberRC[i+1,3]:=b[i];
F1Book1.NumberRC[i+1,4]:=c[i];
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
repeat
f:=false; 
for i:=1 to N-1 do 
begin
if b[i]>b[i+1] then 
begin
f:=true;
x:=b[i];b[i]:=b[i+1];b[i+1]:=x;
end;
end;
until not f;
F1Book2.NumberRC[i+1,1]:=i;
F1Book2.TextRC[i+1,2]:=a[i];
F1Book2.NumberRC[i+1,3]:=b[i];

end;

end.
однако выводит только: http://s53.radikal.ru/i140/1004/9c/222ab6863755.jpg
помогите пожалуйста

Последний раз редактировалось Stilet; 20.04.2010 в 12:36.
inquis вне форума Ответить с цитированием
Старый 20.04.2010, 11:44   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от RUSt88 Посмотреть сообщение
Код:
procedure Sort(var A: TMass);
var
	i, j, m: Integer;
begin
	for i := 0 to N - 1 do begin
		for j := 0 to N - 2 do begin
			if A[j] > A[j + 1] then begin
				m := A[j];
				A[j] := A[j + 1];
				A[j + 1] := m;
			end;
		end;
	end;
end;
Извини, дорогой, но это простая линейная сортировка, но никак не "пузырёк"...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 20.04.2010, 12:45   #9
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Дорогой, это вы ошибаетесь!

Сортировка методом пузырька
Метод основан на сравнении соседних элементов. «Неправильно» расположенные по отношению друг к другу элементы меняются местами. Во вложенных циклах поочередно фиксируется пара соседних элементов массива. В результате первого прохода элемент с минимальным значением оказывается в первой позиции массива (всплывает).

(код и определение взяты из лабораторного практикума по дисциплине "Информатика" Уфимского государственного авиационного технического университета !)
Изображения
Тип файла: png 1.png (8.4 Кб, 81 просмотров)
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 20.04.2010, 12:57   #10
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.

Когда на каком-либо из проходов не произошло ни одного обмена, это значит, что все пары расположены в правильном порядке, так что массив уже отсортирован. И продолжать процесс не имеет смысла(особенно, если массив был отсортирован с самого начала !).
В предлагаемом Вами методе все циклы будут осуществлены независимо от расположения элементов. Даже если массив уже был отсортирован изначально, то количество проходов будет выполнено максимальное число раз... А это есть ни что иное, как простая линейная сортировка...

З.Ы. А ведь изначально-то Вами предлагался совершенно другой фрагмент кода... с линейной сортировкой...

Цитата:

Код:
procedure Sort(var A: TMass);
var
	i, j, m: Integer;
begin
	for i := 0 to N - 1 do begin
		for j := 0 to N - 2 do begin
			if A[j] > A[j + 1] then begin
				m := A[j];
				A[j] := A[j + 1];
				A[j + 1] := m;
			end;
		end;
	end;
end;
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 20.04.2010 в 13:12.
Grag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка методом пузырька fygas1991 Общие вопросы C/C++ 5 15.11.2009 21:39
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52
PHP(или другой язык): Получить все пары "имя" -> "значение" переданные методом POST KingOfNothing PHP 4 12.04.2009 14:06
сортировка методом двухпроходного пузырька. Net* Общие вопросы C/C++ 3 26.05.2008 07:17