Изначально задача заключалась была просто написать программу для сортировки введенных (или случайно сгенерированных) чисел с помощью метода Шелла. Но тогда учитель решил усложнить задачу и сказал:
«Создайте другую функцию, которая будет проверять алгоритм Shell: создать множество массивов из n случайных чисел, отсортировать по методу Шелла и отобразить среднее количество итераций для всех этих массивов»
У меня получилось все, кроме среднего значения для всех массивов. Как это сделать?
Это мой код:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void shellsort(int v[], int n);
int main() {
int SIZE;
printf("Input SIZE: ");
scanf_s("%d", &SIZE);
int N;
printf("Input N: ");
scanf_s("%d", &N);
int* a = (int*)malloc(SIZE * sizeof(int));
int i = 0, num = 0;
while (num != N) {
printf("-------------------------------");
printf("\n");
printf("Enter masiv: ");
for (i = 0; i < SIZE; i++) {
a[i] = rand() % 100;
printf("%d ", a[i]);
}
shellsort(a, SIZE);
printf("\n");
printf("Result: ");
for (i = 0; i < SIZE; i++) {
printf("%d ", a[i]);
}
printf("\n");
num++;
}
return 0;
}
void shellsort(int v[], int n) {
int k, i, j, gap, temp;
int iterations = 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;
iterations++;
}
}
}
printf("\n");
printf("Number of iterations: %d\n", iterations);
}