@Retr0Hacker

Как сделать сортировку Шелла на Си?

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

«Создайте другую функцию, которая будет проверять алгоритм 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);
}
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Возвращайте значение iterations из shellsort. В main суммируйте эти значения и в конце находите среднее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы