指针传参问题 下面这段 问题如何修改 ,请大神指导

///希尔排序 
void  insertI(int * arr, int gap, int i)
{
    int *inserted = (arr + i);
    int j = 0;
    for (j = i - gap; j >= 0 && *inserted < *(arr + j); j -= gap)
    {
        *(arr + j + gap) = *(arr + gap);
    }
    *(arr + j + gap) = *inserted;
}
void shellSort(int *arr, int len)
{
    int N = len;
    for (int gap = N / 2; gap > 0; gap /= 2)
    {
        for (int i = gap; i < N; i++)
            insertI(arr , gap, i);
    }
}
int  main()
{

    int arr[10] = { 2, 34, 52, 6, 76, 1, 3, 56, 34, 87, };
    int len = sizeof(arr) / sizeof(arr[0]);
    shellSort(arr, len);
    for (int i = 0; i < len; i++)
        printf("%3d", arr[i]);
    return 0;
}

只在函数insertI里有两个小问题:

1) int *inersted 记录指针,这个单元得数据其实需要记录下来,否则会被覆盖。所以改成整数类型。

2) 有一个下标错了,*(arr + j + gap) = *(arr + gap); 应该是*(arr + j + gap) = *(arr + j);

改来 这两个小地方后运行通过了。

有时候用指针比数组下标快。但也不能走极端。这个程序了用下标会更好读。


#include <stdio.h>

void  insertI(int * arr, int gap, int i)
{
    int temp = arr[i];
    int j = 0;
    for (j = i - gap; j >= 0 && temp < *(arr + j); j -= gap)
    {
        *(arr + j + gap) = *(arr + j);
    }
    *(arr + j + gap) = temp;
}
void shellSort(int *arr, int len)
{
    int N = len;
    for (int gap = N / 2; gap > 0; gap /= 2)
    {
        for (int i = gap; i < N; i++)
            insertI(arr , gap, i);
    }
}
int  main()
{
    int arr[10] = { 2, 34, 52, 6, 76, 1, 3, 56, 34, 87, };
    int len = sizeof(arr) / sizeof(arr[0]);
    shellSort(arr, len);
    for (int i = 0; i < len; i++)
        printf("%3d", arr[i]);
    return 0;
}


// Output:
  1  2  3  6 34 34 52 56 76 87   

 

 

排序有问题,还是运行报错

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

如果你满意我的回答,请点采纳。你的认可是我们互助的动力。

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y