Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pesni_o_Paskale_2012-11-23.pdf
Скачиваний:
35
Добавлен:
19.03.2016
Размер:
5.16 Mб
Скачать

Глава 43 Сортировка по-взрослому

Итоги

Двоичный поиск – это самый быстрый способ поиска, но он требует предварительной сортировки массива.

Простые методы сортировки – BubbleSort и SelectionSort – работают очень медленно, съедая всю экономию от двоичного поиска.

QuickSort – это быстрый способ сортировки. В сочетании с резвым двоичным поиском он ускорит работу ваших программ.

Аслабо?

А) Исследуйте процедуру быстрой сортировки в пошаговом режиме (задайте небольшой размер сортируемого массива). Обратите внимание на изменение границ сортируемой части.

Б) Определите количество повторных входов в процедуру QuickSort и выходов из нее. Объявите глобальную переменную, назовем её Level — «уровень». В главной программе, перед вызовом процедуры QuickSort, эту переменную надо обнулить, а внутри процедуры добавить следующие операторы.

В начале процедуры QuickSort:

begin

Inc(Level); Writeln('Уровень на входе = ', Level);

В конце процедуры QuickSort:

Dec(Level); Writeln('Уровень на выходе = ', Level);

end;

В) Если каждый вызов QuickSort делит массив примерно пополам, то наибольшее значение переменной Level должно составить приблизительно Log2N (у нас размер массива задан константой CSize). Проверьте эту догадку компиляцией и запуском программы для нескольких значений CSize.

Г) В одном ряду вперемежку лежат дыни и арбузы. Могут ли фермеры отсортировать их за один проход ряда так, чтобы в начале оказались все дыни, а в конце ряда — все арбузы? Напишите такую программу, обозначив арбузы единицами, а дыни — нулями.

330