Next:6.2.5
Числа Фибоначчи
Up:6.2
Построение программ с процедурами и функциями
Previous:6.2.3
Кратные суммы
Решение. Задача допускает следующее очевидное решение с использованием целочисленного массива из 1000 элементов:
1) ввод исходной последовательности в массив ;
2) так называемая сортировка массива или, что то же самое, перестановка его элементов в порядке, при котором
3) печать элементов массива в порядке возрастания их индексов.
Первый и третий шаги очевидны, а для сортировки массива можно использовать следующий довольно простой и весьма эффективный метод.
Рассмотрим элемент, находящийся посередине массива (назовем его ). Затем начнем осуществлять два встречных просмотра массива: двигаемся слева направо, пока не найдем элемент и справа налево, пока не найдем элемент Когда указанные элементы будут найдены, поменяем их местами и продолжим процесс "встречных просмотров с обменами", пока два идущих навстречу друг другу просмотра не встретятся. В результате массив разделится на две части: левую, состоящую из элементов меньших или равных , и правую, в которую попадут элементы, большие или равные После такого разделения массива чтобы завершить его сортировку, достаточно осуществить то же самое с обеими полученными частями, затем с частями этих частей и т.д., пока каждая часть не будет содержать ровно один элемент.
Реализация указанного метода приводит к следующему (рекурсивному!) решению задачи сортировки:
module БыстраяСортировка;
const N = 1000;
type НОМЕР = integer; МАССИВ=array
N+1 of integer;
var M: МАССИВ; I: НОМЕР;
procedure QuickSort(L, R: НОМЕР);
var I, J, X, Y: НОМЕР;
begin I := L; J := R; X := M[(L+R) div
2];
repeat
while M[I] < X do I := I + 1end;
while X < M[J] do J := J - 1end;
if I <= J then
Y := M[I]; M[I] := M[J]; M[J] := Y;
I := I + 1; J := J - 1;
end
(* *)
until
I > J;
if L
< J then QuickSort(L, J) end;
if I
< R then QuickSort(I, R) end;
end QuickSort;
begin
for I:=1 to N do read(M[I])
end;
QuikSort(1,N); (*
*)
for I:=1 to N do write(M[I])
end;
end БыстраяСортировка.
Указанный метод из-за своих хороших временных характеристик получил название "быстрой сортировки".
Next:6.2.5
Числа Фибоначчи
Up:6.2
Построение программ с процедурами и функциями
Previous:6.2.3
Кратные суммы