Что за класс сортировки? Можете дать объяснение данной программе?

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) времени, на общую производительность он не влияет.

→ Ссылка