- •Глава 2. Сортировка и порядковые статистики
- •Отношение на множестве целых чисел является линейным порядком, а включение множеств нет.
- •Алгоритм 8. Лексикографической сортировки
- •Алгоритм 9. Лексикографической сортировки строк различной длины
- •Алгоритм 10.1. Построение сортирующего дерева
- •Алгоритм 10.2. Сортдеревом
- •Алгоритм 11. Быстрсорт
- •Алгоритм 12.1. Нахождение k-го наименьшего элемента
- •Алгоритм 12.2. Нахождение k-го наименьшего элемента со случайным выбором разбивающего элемента
- •Int Selection(int array[], unsigned order, unsigned init, unsigned fin);
- •Void main()
- •Int result, result1, *array, *array1;
- •Int Selection(int array[], unsigned order, unsigned init, unsigned fin)
- •Int divisor, temp;
Int Selection(int array[], unsigned order, unsigned init, unsigned fin)
{ // Функция выбора k-го наименьшего элемента в массиве array (k=order) между элементами с
// номерами init и fin с помощью случайного выбора разбивающего элемента
unsigned div, indi, indj;
Int divisor, temp;
if (fin<init) printf("Неправильное использование: init > fin \n");
if ((init>(order-1))||(fin<(order-1))) return -32767;
if ((fin-init+1)<25)
{
// В этом месте должна стоять функция сортировки короткого массива с числом
// элементов, меньшим 25, находящихся в большом массиве array между
// элементами с номерами init и fin
return (array[order-1]);
} else
{
div=random(fin-init); // Случайный выбор разделителя между init и fin
divisor=array[init+div];
// Разбиение массива array на три части, содержащие элементы меньшие, равные и
// большие среднего соответственно
indi=init; indj=fin;
while(indi<=indj)
{
while ((array[indj]>=divisor)&&(indj>=init)) indj--;
while ((array[indi]<divisor)&&(indi<=fin)) indi++;
if (indi<indj)
{
// Перестановка элементов array[indi] и array[indj]
temp=array[indi]; array[indi++]=array[indj]; array[indj--]=temp;
}
}
if (indi>=order) return Selection(array, order, init, indi-1);
else return Selection(array, order, indi, fin);
}
} // Конец Selection
Функция randomize() (строка ) является стандартной функцией в алгоритмическом языке Borland C++, которая используется в сочетании с функцией random(m) (строка ), такой же стандартной библиотечной функцией данного языка, для того, чтобы в каждом последующем использовании данной программы получались различные последовательности целых псевдослучайных чисел с равномерным законом распределения.