alps_in_the_milk 2022-12-21 09:35 采纳率: 100%
浏览 19
已结题

希尔排序不正确的问题

问题遇到的现象和发生背景

在学习希尔排序

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include <stdio.h>
#include<stdlib.h>

void swap (int *a, int *b)
{
    int tem;
    tem = *a;
    *a = *b;
    *b = tem;
}
void Shell_Sort (int a[], int n)//希尔排序,由小到大 
{
    int gap = 1;
    int i, j;
    
    while (gap < n/3)
    {
        gap = 3*gap + 1;//最大gap 
    }
    
    while (gap > 0)
    { 
        for (i = gap; i < n; ++i)
        {
            for (j = i - gap; j >= 0 && a[j] > a[i]; j -=gap)//如果比同一组的前一个大则交换位置 
            {
                swap (&a[i], &a[j]);
            }
        }
        
        gap = gap/3;
    }
    
 } 
int main ()
{
    system ("color f0");
    
    int a[6], i;
    
    for(i = 0; i < 6; i++)
    {
        scanf("%d", &a[i]);
    }
    
    Shell_Sort(a, 6);
    
    for(i = 0; i < 6; i++)
    {
        printf("a[%d] = %d\t", i, a[i]);
    }
    
    return 0;
}

运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

没什么思路……

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

2条回答 默认 最新

  • 小6的跟班 2022-12-21 10:59
    关注
    
    #include <stdio.h>
    void group_sort(int a[], int n,int i,int gap) {
        int j;
        for (j = i + gap; j < n; j += gap) {
            // 如果a[j] < a[j-gap],则寻找a[j]位置,并将后面数据的位置都后移。
            if (a[j] < a[j - gap]) {
                int tmp = a[j];
                int k = j - gap;
                while (k >= 0 && a[k] > tmp) {
                    a[k + gap] = a[k];
                    k -= gap;
                }
                a[k + gap] = tmp;
            }
        }
    }
    void shell_sort(int a[], int n) {
        int i, gap;
        // gap为步长,每次减为原来的一半。
        for (gap = n / 2; gap > 0; gap /= 2) {
            // 共gap个数组,对每一组进行直接插入排序
            for (i = 0; i < gap; i++) {
                group_sort(a, n, i, gap);
            }
        }
    }
    int main() {
        int a[6], i;
        for(i = 0; i < 6; i++){
            scanf("%d", &a[i]);
        }
        shell_sort(a, 6);
        for (int i = 0; i < 6; i++) {
            printf("%d ", a[i]);
        }
        printf("\n");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 12月21日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效