Рассмотрим реализацию функций сортировки методом Шелла и быстрой сортировки на С++ .
/* ФУНКЦИЯ СОРТИРОВКИ МЕТОДОМ ШЕЛЛА */
void Shell(int A[],int nn)
{ int i,j,k,x,ii;
k =( nn+1)/2;
while ( k >= 1 )
{
for ( i=k; i<nn; i++ )
{ if ( A[i-k] > A[i] )
{ x = A[i]; j = i-k;
M: A[j+k] = A[j];
if ( j>k )
{ if (A[j-k] > x )
{ j = j-k;
goto M;
}
}
A[j] = x;
/* printf(" \nk = %d x=%d: ",k,x);
for (ii=0; ii<nn; ii++)
printf(" %d ",A[ii]);*/
}
}
/* Отладочная печать */
printf(" \nk = %d ",k);
for (ii=0; ii<nn; ii++)
printf(" %d ",A[ii]);
if ( k>2 )
k = (k+1)/2;
else
k = k/2;
}
}
/* ФУНКЦИЯ БЫСТРОЙ СОРТИРОВКИ QuickSort */
void QuickSort(int A[],int L,int R)
{ int i,j,k,x,m;
i = L; j = R;
x =A[(L+R)/2];
do
{
while ( A[i] < x )
i++;
while ( x < A[j] )
j--;
if (i <= j)
{ k = A[i]; A[i] = A[j]; A[j] = k;
i++; j--;
/* Отладочная печать */
printf("\n i=%d j=%d x=%d: ",i-1,j+1,x);
for (m=0; m<n; m++)
printf(" %d",A[m]);
}
}
while (i < j);
if (L < j)
{ printf("\t L=%d j=%d",L,j);
QuickSort(A,L,j);
}
if (i < R)
{ printf("\t i=%d R=%d",i,R);
QuickSort(A,i,R);
}
}