Пример. Сортировка пузырьком. Название этого метода произошло от известного физического явления - пузырек воздуха в воде поднимается вверх. В этом методе сначала поднимается "наверх" (к началу массива) самый "легкий" элемент (минимальный), затем следующий и т.д. Делается это так. Сравниваем последний элемент с предпоследним. Если они стоят неправильно, то меняем их местами. Далее так же рассматриваем следующую пару элементов и т.д. Когда мы обработали пару A[0]-A[1], минимальный элемент стоит на месте A[0]. Это значит, что на следующих этапах его можно не рассматривать.
При следующем проходе наша задача - поставить на место элемент A[1]. Делаем это так же, но уже не рассматриваем A[0], который стоит на своем месте. Сделав N-1 проходов, мы установим на место элементы A[0]-A[N-2]. Это значит, что последний элемент уже тоже стоит на своем месте. Метод пузырька работает медленно, особенно на больших массивах. Доказано, что при увеличении размера массива в 10 раз время выполнения программы увеличивается в 100 раз (метод имеет порядок N2). К сожалению, все простые алгоритмы сортировки имеют такой (квадратичный) порядок.
#include < stdio.h >
const N = 10;
void main()
{
int i, j, A[N], c;
// ввод массива A
for ( i = 0; i < N-1; i ++ )
for ( j = N-2; j >= i; j -- )
if ( A[j] > A[j+1] )
{
c = A[j]; A[j] = A[j+1];
A[j+1] = c;
}
printf("\n Отсортированный массив:\n”);
for ( i = 0; i < N; i ++ )
printf("%d ", A[i]);
}
int sort (int x[ ], int n)
{
int i, j, save, im1;
/*This function sorts array x in ascending order */
If (n< 2) return 1;
for (i=2; i< =n; i++)
{
im1=i-1;
for (j=1; j< =im1; j++)
if (x[i] < x[j])
{
Save = x[i];
x[i] = x[j];
x[j] = save;
}
}
return 0;
}
Для данного кода программы:
1. определить словарь программы, длину реализации и длину программы в условных единицах по метрикам Холстеда.
2. Определить метрику Джилба
for (int i = 0; i < 6; i++) {
for (int i2 = i; i2 < 5; i2++)
{
int a;
if (m1[i2] > m1[i2 + 1])
{
a = m1[i2]; m1[i2] = m1[i2 + 1]; m1[i2 + 1]=a;
}
}
}