Алгоритм быстрой сортировки использует вспомогательную функциюpartition, которая разделяет массив на 3 части:в начале элементы, меньшие либо равные медиане, затем медиана,в конце элементы, большие либо равные медиане. Рассмотрим следующуюреализацию функции partition:void partition(double* a, int n, int *m) { if (*m != 0) // Ставим медиану в начало swap(&(a[0]), &(a[*m])); double x = a[0]; // Значение медианы int i = 0; int j = n; while (j-i > 1) { // Инв: a[1], a[2], ..., a[i] <= x // a[j], a[j+1], ..., a[n-1] > x if (a[i+1] <= x) { ++i; } else if (a[j-1] > x) --j; } else { ++i; --j; swap(&(a[i]), &(a[j])); } } if (i > 0) swap(&(a[0]), &(a[i])); *m = i;}
Правильна ли подобная реализация, или она может привестик катастрофическому замедлению алгоритма быстройсортировки в некоторых случаях?
(Отметьте один правильный вариант ответа.)
Варианты ответа
Реализация неправильная. (Верный ответ)
Реализация правильная.