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
Кратные суммы