СОРТИРОВКА ДАННЫХ
[Оглавление] [<< страница] [>>страница]


   2.2. Сортировка методом прямого выбора
 

Алгоритм сортировки заключается в следующем:

Число сравнений С = (п2 - n), число перестановок: Мmin=(n-1), Мсредн = n(In n + g), где g = 0.577216 — константа Эйлера, Mmax=n2/4+3(n-1).

Отсюда алгоритм с прямым выбором несколько предпочтительней алгоритма прямого включения. Однако если ключи вначале почти упорядочены, то прямое включение будет несколько быстрее. Приведем пример программы с функцией сортировки посредством прямого выбора и результаты выполнения программы с отладочной печатью по шагам сортировки.

Пример.

/* СОРТИРОВКА ПОСРЕДСТВОМ ПРЯМОГО ВЫБОРА */
#include
#include
#define n 8
int A[n]={27,412,71,81,59,14,273,87};
main()
{ void StrSel(int A[],int nn);
int j;
printf("\n Исходный массив \n");
for (j=0; j<n; j++)
printf("\t%d",A[j]);
printf("\n");
StrSel(A,n);
printf("\n Отсортированный массив \n");
for (j=0; j<n; j++)
printf("\t%d",A[j]);
printf("\n"); getch();
return 0;
}
/* ФУНКЦИЯ СОРТИРОВКИ ПРЯМЫМ ВЫБОРОМ */
void StrSel(int A[],int nn)
{ int i,j,x,k;
for (i=0; i<nn-1; i++)
{ x=A[i]; k=i; printf("\n %d",i);
for (j=j+1; j<nn; j++)
if (A[j]<x)
{ k=j; x=A[k]; }
A[k]=A[i]; A[i]=x;
/* Отладочная печать по шагам сортировки */
for (j=0; j<nn;j++)
printf("\t %d”,A[j]);
}
}

Исходный массив:
27   412   71    81   59    14    273   87
Отладочная печать по шагам сортировки:
0   14  412  71  81  59  27  273  87
1   14  27  71  81  59  412  273  87
2   14  27  59  81  71  412  273  87
3   14  27  59  71  81  412  273  87
4   14  27  59  71  81  412  273  87
5   14  27  59  71  81  87  273  412
6   14  27  59  71  81  87  273  412

Отсортированный массив:
14   27   59   71   81   87   273   412.
Несмотря на то, что после пятого шага последовательность уже отсортирована, сортировка продолжается.

[Оглавление] [<<страница] [>>страница] [В начало ]