【问题标题】:Shell Sort C languageShell排序C语言
【发布时间】: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 &lt; 5; i++)里面吗?

标签: c sorting shellsort


【解决方案1】:

好吧,我首先要说的是,我不会做你的作业并为它编写代码。我只是试着给你一个起点。

Shell sort 目前不计算迭代次数,因此您可以在 shellsort 的开头声明一个名为 iterations 的变量,并在 shell sort 内部最深的循环中递增它,并返回此变量而不是返回 void。

您将要编写的新函数应该与您在主程序中为数字生成部分所做的类似。 制作一个循环来封装为您生成数组的循环。因为你现在需要多个数组。

存储迭代的总和,可能像这样sum += shellsort(a); 那么迭代的平均值就是sum/N,其中N是你想要生成的随机数组的个数。

【讨论】:

  • num inside shellsort 已经在计算迭代次数
  • 然后返回。从 void 变为 int。
猜你喜欢
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多