Сортировка Шелла на Си

Задача заключалась в том, чтобы просто написать программу для сортировки введенных (или случайно сгенерированных) чисел с помощью метода Шелла. Но тогда учитель решил усложнить задачу и сказал:

«Создайте другую функцию, которая будет проверять алгоритм Shell: создать множество массивов из n случайных чисел, отсортировать по методу Шелла и отобразить среднее количество итераций для всех этих массивов»

Пожалуйста, помогите и объясните, как это сделать

Это мой код:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void shellsort(int v[], int n);

int main() {
srand(time(NULL));
int N;
printf("Input N: ");
scanf_s("%d", &N);
int* a = (int*)malloc(N * sizeof(int));
int i = 0;

printf("Enter masiv: ");
for (; i < N; i++) {
a[i] = rand() % 100;
printf("%d ", a[i]);
}

shellsort(a, N);

printf("\n");
printf("Result: ");
for (i = 0; i < N; i++) {
   printf("%d ", a[i]);
}
printf("\n");

   return 0;
}

void shellsort(int v[], int n) {

int i, j, gap, temp;
int num = 0;

for (gap = n / 2; gap > 0; gap /= 2) {
    for (i = gap; i < n; i++)
        for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap)
        {
            temp = v[j];
            v[j] = v[j + gap];
            v[j + gap] = temp;
            num++;
        }
}
printf("\n");
printf("Number of iterations: %d\n", num);

}

Заранее спасибо всем кто откликнется!


Ответы (0 шт):