Рассмотрим реализацию функций сортировки методом пузырька и его усовершенствований на С++

 /*  ФУНКЦИЯ СОРТИРОВКИ МЕТОДОМ ПУЗЫРЬКА  */

  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 );

}

/* *********************************************** */