Рассмотрим реализацию функций сортировки методом пузырька и его усовершенствований на С++
/* ФУНКЦИЯ СОРТИРОВКИ МЕТОДОМ ПУЗЫРЬКА */
void BblSort(int A[],int nn)
{ int i,j,k,p;
printf("\n Отладочная печать по шагам сортировки");
for ( i=0; i<nn-1; i++ )
{ p = 0;
for (j=nn-1; j>i; j--)
if (A[j] <A[j-1])
{ k = A[j]; A[j] = A[j-1]; A[j-1] = k; p = 1;}
/* Если перестановок не было, то сортировка выполнена */
if ( p == 0)
break;
printf(" \ni = %d",i);
for (j=0; j<nn;j++)
printf("\t %d",A[j]);
}
}
Усовершенствованием алгоритма является так называемая шейкерная сортировка, где после каждого прохода меняется направление во внутреннем цикле.
/* ФУНКЦИЯ ШЕЙКЕРНОЙ СОРТИРОВКИ */
void ShkrSort(int A[],int nn)
{ int i,j,k,x,L,R;
L = 1; R = nn-1; k = nn-1;
printf("\n Отладочная печать");
do
{
for ( j=R; j>=L; j-- )
if ( A[j-1] > A[j] )
{ x = A[j-1]; A[j-1] = A[j]; A[j]=x; k=j; }
L = k + 1;
/* Отладочная печать */
printf(" \nL = %d",L);
for (i=0; i<nn; i++)
printf("\t%d",A[i]);
for (j=L; j<=R; j++)
if ( A[j-1] > A[j] )
{ x = A[j-1]; A[j-1] = A[j]; A[j] = x; k = j; }
R = k -1;
/* Отладочная печать */
printf(" \nR = %d",R);
for (i=0; i<nn; i++)
printf("\t%d",A[i]);
}
while ( L < R );
}
/* *********************************************** */