Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по МОИ (глава2).doc
Скачиваний:
8
Добавлен:
05.11.2018
Размер:
397.82 Кб
Скачать

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) (строка ), такой же стандартной библиотечной функцией данного языка, для того, чтобы в каждом последующем использовании данной программы получались различные последовательности целых псевдослучайных чисел с равномерным законом распределения.