【发布时间】:2022-01-10 13:46:54
【问题描述】:
任务只是编写一个程序,使用 Shell 排序方法对输入的(或随机生成的)数字进行排序。但后来老师决定把任务复杂化并说:
创建另一个函数来测试 Shell 的算法:从 n 个随机数创建许多数组,按 Shell 的方法排序并显示所有这些数组的平均迭代次数。
请帮忙解释一下怎么做
这是我的代码:
#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);
}
非常感谢所有回复的人;))
【问题讨论】:
-
你有创建随机数组的代码,你已经计算了迭代次数你到底坚持什么?
-
不,不,不,我需要程序有条件地生成 5 个数组,每个数组中都会有随机数,对它们进行排序,计算每个数组的迭代次数,最后显示它们的平均值
-
你不能把你现有的代码放在
for (int i=0; i < 5; i++)里面吗?