资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

一个插入排序的例子。出现BUG!!!

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

先看代码如下;  
   
  #include   <stdio.h>  
   
  void   main()  
  {  
  int   buf[]={11,5,33,7,1};  
  int   i,j,length,temp;  
  length=sizeof(buf)/sizeof(int);  
  printf("排序前:");  
  for(i=0;i<length;i++)  
  printf("%d\t",buf[i]);  
  printf("\n");  
   
  for(i=1;i<=length;++i) //排序  
  if(buf[i]<buf[i-1]){  
  temp=buf[i];  
  for(j=i-1;temp<buf[j];--j)  
  buf[j+1]=buf[j];  
  buf[j+1]=temp;  
  }  
   
  printf("排序后:");  
  for(i=0;i<length;i++)  
  printf("%d\t",buf[i]);  
  printf("\n");  
  }  
   
  运行结果为:  
  排序前:11             5               33             7               1  
  排序后:4               5               7               11             33  
   
  在代码中,int   buf[]={11,5,33,7,1};这一行明明是“1”,怎么会出现“4”??  
  另外我试了如果将最后的元素改成6,8或其他大于等于4的数据都会出现正确的答案,可如果换成1,2,或3,出现的结果都出现4。不知为什么。郁闷中!~~~~  
   
  还望各位看看哪里出现错误了!

网友回答:

发表者:kobefly

这样就可以了  
   
  #include   <stdio.h>  
  #include   <stdlib.h>  
   
  #include   <stdio.h>  
   
  void   main()  
  {  
  int   buf[]={11,5,33,7,1};  
  int   i,j,length,temp;  
  length=5;  
  printf("&Aring;&Aring;&ETH;ò&Ccedil;°&pound;&ordm;");  
  for(i=0;i<length;i++)  
  printf("%d\t",buf[i]);  
  printf("\n");  
   
  for(i=1;   i   <   length;   ++i) //&Aring;&Aring;&ETH;ò  
  if(buf[i]<buf[i-1])  
  {  
  temp=buf[i];  
  for(j=i-1;   temp   <   buf[j]   &&   j   >=0;   --j)  
                                                            //这里帮你trace了一下,   主要是数组越界了(下界)  
  buf[j+1]=buf[j];  
  buf[j+1]=temp;  
  }  
   
  printf("&Aring;&Aring;&ETH;ò&ordm;ó&pound;&ordm;");  
  for(i=0;i<length;i++)  
  printf("%d\t",buf[i]);  
  printf("\n");  
  }

发表者:qianyao

for(j=i-1;temp<buf[j];--j)  
  这一句出错了,可能导致j=   -1时还在比较temp<buf[j],可以改为for(j=i-1;j   >=   0   &&   temp<buf[j];--j),j   >=   0   一定要放前面,这样当j=-1时就不会检测后面的temp<buf[j],也就不会有非法数据buf[-1]了。


 

 
热门推荐笔记本: IBM笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved