【问题标题】:Shell sort of integer array in CC中的Shell排序整数数组
【发布时间】:2015-01-03 12:05:57
【问题描述】:

我是 C 新手,正在尝试学习 shell 排序。我正在尝试按升序对整数数组进行排序。这是我的代码-

#include <stdio.h>
main()
{
    int a[] = {1, 9, 7, 4, 8, 6, 7,2,1,6 };
    int n =10; //array length

    for (int c = (n / 2); c > 0; c = c / 2)
    {

        for (int i = c; c < n; i++)
        {
            int t = a[i];
            int j;
            for (j = i;( j >= c) && (t < a[j - c]); j = j - c)
            {
                a[j] = a[j - 1];

            }
            a[j] = t;

        }

    }
    for (int i = 0; i <= 9; i++)
    {
        printf("%d ", a[i]);
    }
}

在 Visual Studio Express 中编译此代码时,出现一条错误消息,要求关闭或调试,并且输出终端未显示任何输出。我无法弄清楚此代码中有什么问题。如果有人能解释一下,我将不胜感激,也许可以为我指出一个可以满足我要求的解决方案。

【问题讨论】:

  • 确切的错误是什么?
  • 也许for (int i = c; c &lt; n; i++) 应该是for (int i = c; i &lt; n; i++)
  • 其实编译时没有报错。输出终端一来,shellsort.exe(我的项目名)已经停止工作,有两个选项——调试和关闭程序
  • 在调试器中运行它。它会查明程序崩溃的确切位置,并让您检查变量等。
  • 你的代码编译了吗?我以为VS不支持C99!

标签: c arrays shell sorting


【解决方案1】:

您的代码几乎是正确的,只需将for (int i = c; c &lt; n; i++) 替换为for (int i = c; i &lt; n; i++) 'c' 总是小于 'n' 这就是你的代码陷入无限循环的原因。

【讨论】:

  • 感谢它起作用了。只需在 a[j] = a[j - 1] 到 a[j] = a[j - c] 处再进行一次更改;
【解决方案2】:
try to add this code....
#include<stdio.h>
#include<conio.h>
int main()
{
 int arr[30];
 int i,j,k,tmp,num;
 printf("Enter total no. of elements : ");
 scanf("%d", &num);
 for(k=0; k<num; k++)
{
  printf("\nEnter %d number : ",k+1);
  scanf("%d",&arr[k]);
}
for(i=num/2; i>0; i=i/2)
{
 for(j=i; j<num; j++)
 {
   for(k=j-i; k>=0; k=k-i)
   {
    if(arr[k+i]>=arr[k])
        break;
    else
    {
        tmp=arr[k];
        arr[k]=arr[k+i];
        arr[k+i]=tmp;
    }
   }
  }
}
printf("\t**** Shell Sorting ****\n");
for(k=0; k<num; k++)
 printf("%d\t",arr[k]);
getch();
 return 0;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2019-03-06
    • 2012-11-27
    相关资源
    最近更新 更多