Сортировка с помощью прямого выбора

 

 

Этот приём основан на следующих принципах:

1. Выбирается элемент с наименьшим значением.

2. Он меняется местами с первым элементом A1.

3. Затем этот процесс повторяется с оставшимися n-1 элементами, n-2 элементами и т. д. до тех пор, пока не останется один, самый большой элемент.

 

Процесс работы этим методом с теми же восемью ключами, что и в таблице, использованной в разделе “метод прямого включения” проиллюстрирован ниже.

Алгоритм формулируется следующим образом:

FOR i := 1 ТО n-1 DO

присвоить k индекс наименьшего из a[i] .,. а[п];

поменять местами a[i] и a[k];

END;

Такой метод - его называют прямым выбором - в некотором смысле противоположен прямому включению. При прямом Включении на каждом шаге рассматриваются только один очередной элемент исходной последовательности и все элементы готовой последовательности, среди которых отыскивается точка включения; при прямом выборе для поиска одного элемента с наименьшим ключом просматриваются все элементы исходной последовательности и найденный помещается как очередной элемент в гототовую последовательность.

Анализ прямого выбора. Число сравнений ключей (С), очевидно, не зависит от начального порядка ключей. Можно сказать, что в этом смысле поведение этого метода менее естественно, чем поведение прямого включения. Для С имеем:

C=(п2-п)/2.

Число перестановок минимально:

Мmin = 3 * (n -1);

в случае изначально упорядоченных ключей и максимально:

Мmах = п2 / 4 + 3 * (n - 1),

если первоначально ключи располагались в обратном порядке. Для того чтобы определить Mavg, мы должны рассуждать так. Алгоритм просматривает массив, сравнивая каждый элемент с только что обнаруженной минимальной величиной; если он меньше первого, то выполняется некоторое присваивание. Вероятность, что второй элемент окажется меньше первого, равна 1/2, с этой же вероятностью происходят присваивания минимуму. Вероятность того, что третий элемент окажется меньше первых двух, равна 1/3, а вероятность для четвертого оказаться наименьшим - 1/4 и т. д. поэтому полное ожидаемое число пересылок равно Нn -1, где Нn – n-ное гармоническое число:

Нn = 1+ 1/ 2 + 1/3 + ...+ 1 / п.

Нn можно выразить и так:

Нn = In n + g + 1/ 2п - 1 / 12п2 + …,

где g = 0.577216 ... - константа Эйлера. Для достаточно больших n мы можем игнорировать дробные составляющие и поэтому аппроксимировать среднее число присваиваний на i-ом просмотре выражением:

Fi = In i + g+ 1.

Среднее число пересылок Mavg , в сортировке с выбором есть сумма Fi с i от 1до п:

Mavg = n *(g + 1) + (Si: 1? i ? n: In i).

Вновь аппроксимируя эту сумму дискретных членов интегралом,

Integral (1 : п) ln х dx = х * (ln х - 1) = п* ln (п) - п + 1,

получаем наконец приблизительное значение:

Mavg == п * (ln (п) + g).

Отсюда можно сделать заключение, что, как правило, алгоритм с прямым выбором предпочтительнее строгого включения. Однако, если ключи в начале упорядочены или почти упорядочены, прямое включение будет оставаться несколько более быстрым.

 

Другие методы сортировки:

1. Сортировки с помощью включения (by insertion).

2. Сортировки с помощью прямого выбора (by selection).

3. Сортировки с помощью обмена (by exchange).

 

Усовершенствованные методы сортировки.