Что за класс сортировки? Можете дать объяснение данной программе?
void sort(int in[], int a, int b){
int i,j,mode;
double sr=0;
if (a>=b) return;
for (i=a; i<=b; i++) sr+=in[i];
sr=sr/(b-a+1);
for (i=a, j=b; i <= j;)
{
if (in[i]< sr) { i++; continue; }
if (in[j]>=sr) { j--; continue; }
int c = in[i]; in[i] = in[j]; in[j]=c;
i++,j--;
}
if (i==a) return;
sort(in,a,j); sort(in,i,b);}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Павел прав, быстрая сортировка.
void sort(int in[], int a, int b){
int i,j,mode;
double sr=0;
if (a>=b) return; // Проверка что есть сортируемый диапазон
// Поиск опорного значения как среднего арифматического
for (i=a; i<=b; i++) sr+=in[i];
sr=sr/(b-a+1);
// Partition относительно опорного значения
for (i=a, j=b; i <= j;)
{
if (in[i]< sr) { i++; continue; }
if (in[j]>=sr) { j--; continue; }
int c = in[i]; in[i] = in[j]; in[j]=c;
i++,j--;
}
if (i==a) return;
// Рукурсивные вызовы
sort(in,a,j); sort(in,i,b);}
Поскольку вычисление опорного элемента занимает O(N) времени, на общую производительность он не влияет.