Вопрос № 179134: Помогите, пожалуйста. Рассортировать числа «горкой», то есть 1 минимальное на первое место, 2 минимальное на последнее место и т. д. Затем удалить максимальное значение из данных....
Вопрос № 179134:
Помогите, пожалуйста.
Рассортировать числа «горкой», то есть 1 минимальное на первое место, 2 минимальное на последнее место и т. д. Затем удалить максимальное значение из данных.
Небольшой поиск в интернете дает простую программу сортировки «горкой» на Паскале, написанную экспертом Пупоревым Юрием Борисовичем. Чтобы не повторяться, привожу свой вариант сортировки с последующим удалением максимального элемента.
Код:
{ Рассортировать числа «горкой», то есть 1 минимальное на первое место, 2 минимальное на последнее место и т. д. Затем удалить максимальное значение из данных. } program q179134;
var a: array [0..99] of integer; n,i,iMin,loc,left,right: integer; min,temp: integer;
{ вывод n перв
ых элементов массива на экран } procedure printA( n: integer ); var i: integer; begin for i:=0 to n-1 do write( a[i]:4 ); { 20 элементов в строке } writeln; end;
begin write( 'Razmer massiva n=' ); readln( n ); { заполняем массив случайными числами от 0 до 99 } randomize; for i:=0 to n-1 do a[i]:=random(100);
writeln( 'Ishodnyj:' ); printA( n );
loc := 0; { текущая позиция для записи минимума } left := 0; { левая
граница несортированной части } right := n-1; { правая граница несортированной части } while left < right do begin { пока границы не сошлись в середине } { ищем минимум } iMin := left; min := a[left]; for i:=left+1 to right do if a[i] < min then begin iMin := i; min := a[i]; end;
{ обмениваем значение a[loc] с минимальным } temp := a[loc]; a[loc] := min; a[iMin] := temp;
{ сдвигаем границы } if
loc < right then begin loc := right; inc( left ); end else begin loc := left; dec( right ); end; end;
writeln( 'Gorka:' ); printA( n );
{ здесь left=right, причем это индекс макс. элемента } writeln( 'Max = ', a[left] ); { удаляем максимальный элемент } for i := left to n-2 do a[i] := a[i+1]; dec(n); printA( n );
write( 'Press [Enter] to exit...' ); readln; end.
Программа
проверена в Borland Pascal 7.0.
Успехов!
Ответ отправил: amnick, Профессионал
Ответ отправлен: 17.06.2010, 14:10
Номер ответа: 262163
Оценка ответа: 5 Комментарий к оценке: спасибо!
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 262163
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.