c - C 中排序代码错误

标签 c

我认为算法有问题。 它显示错误的答案。 我逐行更改,但没有得到正确的答案。

#include<stdio.h>

void sort(int a[],int n)
{
    int gap,i,j,temp;
    for(gap=n;gap>0;gap/=2)
    {
        for(i=gap;i<n;i+=1)
        {
            temp=a[i];

            for(j=i;j>=gap&&a[j]>temp;j=gap)
                a[j]=a[j];

            a[j]=temp;
        }
    }
}

int main()
{
    int a[20],i,n;

    printf("Number of elements:");
    scanf("%d",&n);

    printf("Enter array elements:\n");
    for(i=0;i<n;++i)
        scanf("%d",&a[i]);

    printf("Array elements before the sort:\n");
    for(i=0;i<n;++i)
        printf("%d",a[i]);

    sort(a,n);

    printf("\nAfter sort:\n");
    for(i=0;i<n;++i)
        printf("%d ",a[i]);

    return 0;
}

请帮我处理这段代码。

最佳答案

你是对的,你的算法存在一些问题。 在第 6 行中,间隙应该是 n/2,而不是 n。 第 12 行应该是 j-gap。

纠正这些错误后,我重写了代码。 希望它能有所帮助。 干杯。

#include<stdio.h>

void sort(int a[],int n)
{
    int gap,i,j,temp;
    for(gap=n/2;gap>0;gap/=2)
    {
        for(i=gap;i<n;i+=1)
        {
            temp=a[i];

            for(j=i;j>=gap&&a[j-gap]>temp;j-=gap)
                a[j]=a[j-gap];

            a[j]=temp;
        }
    }
}

int main()
{
    int a[20],i,n;

    printf("Number of elements:");
    scanf("%d",&n);

    printf("Enter array elements:\n");
    for(i=0;i<n;++i)
        scanf("%d",&a[i]);

    printf("Array elements before the sort:\n");
    for(i=0;i<n;++i)
        printf("%d",a[i]);

    sort(a,n);

    printf("\nAfter shell sort:\n");
    for(i=0;i<n;++i)
        printf("%d ",a[i]);

    return 0;
}

关于c - C 中排序代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50824401/

相关文章:

c - 即使分配后,结构指针仍保持为 NULL

c - 有 gSOAP 的轻量级替代品吗?

c++ - 为什么事件轮询循环中的函数触发频率低于其外部的函数

c - 我在程序中读取文件时遇到困难。我是否正确使用 for 循环来读取文件?

c - 如何在不使用 POSIX 库 <pthread.h> 的情况下在 C 中创建线程

c++ - C/C++ 编译器对条件语句进行了多少优化?

java - 在一个项目中将 C++ 与 Java 集成。有可能吗?怎么做?

C 的 pow 函数拒绝使用可变指数

c - 这些关于指针的陈述是否具有相同的效果?

c - 修复 Web 服务器上的缓冲区溢出漏洞