| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 475 人关注过本帖
标题:C语言程序执行问题
只看楼主 加入收藏
风之尘莫
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-3-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
C语言程序执行问题
我用c语言编写了一个希尔排序的程序。程序本身没有什么问题,因为当我用3个数据进行测试时,发现能得到正确的结果,但是如果数据增加到4个或以上程序就只能执行到一半,但是没有提示错误,也没有死机,就是感觉程序不动了。一下是源程序:

#include<stdio.h>
#define LEN 20
void ShellSort(int a[],int length);
void BubbleSort(int a[],int start,int length,int jump);
void main()
{
 int x[LEN];
 int i;
 int length;
 printf("Please input the length of array!\n");
 scanf("%d",&length);
 //输入数组
 printf("Please input numbers:");
 for(i=0;i<length;i++)
 {
  scanf("%d",&x[i]);
 }
 printf("\n");
 printf("the orginal numbers are:");
 for(i=0;i<length;i++)
 {
  printf("%d ",x[i]);
 }
 printf("\n");
 ShellSort(x,length);
 printf("the sorted numbers are:");
 for(i=0;i<length;i++)
 {
  printf("%d ",x[i]);
 }
 printf("\n");
}
void ShellSort(int a[],int length)
{
 int jump,i;
 jump=length;
 while(jump>1)
 {
  jump=length/2;
  for(i=0;i<jump;i++)
  BubbleSort(a,i,length,jump);
 }
}
void BubbleSort(int a[],int start,int length,int jump)
{
 int alldone=0;
 int i,j;
 for(i=start;i<length-jump;i+=jump)
 {
  alldone=0;
  for(j=i;j<length-i-jump;j+=jump)
  if(a[j]>a[j+jump])
  {
   int temp=a[j];
   a[j]=a[j+jump];
   a[j+jump]=temp;
   alldone=1;
  }
  if(alldone==0) break;
 }
}

比如我输入3个数据: 3 1 4

显示:

the orgianl numbers: 3 1 4

the sorted numbers are: 1 3 4

但是如果是4个数据的话: 1 2 3 4

只显示 : the orginal numbers: 1 2 3 4,然后程序就不动了。求大神指教啊!!下面是程序执行的截图。
http://b.hiphotos.baidu.com/zhidao/pic/item/0823dd54564e925810d051369d82d158cdbf4e06.jpg
http://h.hiphotos.baidu.com/zhidao/pic/item/a1ec08fa513d26971653df8554fbb2fb4216d862.jpg

请问是什么问题,应该怎么解决呢?
搜索更多相关主题的帖子: include C语言 源程序 c语言 start 
2013-08-21 11:45
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
估计是死循环了,调试下就知道了

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-21 12:01
风之尘莫
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-3-30
收藏
得分:0 
谢谢楼主关注,问题找到了
while(jump>1)
{
  jump=length/2;//后面没有对length进行改变,所以当length>4时,就一直循环,就进行死循环了
  for(i=0;i<jump;i++)
  BubbleSort(a,i,length,jump);
}
2013-08-21 12:07
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
o(∩_∩)o

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-21 12:08
快速回复:C语言程序执行问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029481 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved