为了账号安全,请及时绑定邮箱和手机立即绑定

关于c语言中冒泡排序的一个小问题。

关于c语言中冒泡排序的一个小问题。

C C++
慕粉1600176492 2016-11-14 21:10:33
#include"stdio.h"#define N 10 int main() {  float a[N]={1.78,1.77,1.82,1.79,1.85,1.75,1.86,1.77,1.81,1.80};  int i,j;  for(i=N-1;i>=0;i--)  {  for(j=0;j<i;j++) //如果在该行for语句中的j<i改为j<=i,则输出的数全变成0.0了。 请问为什么呢 ?  {                        //和自身比较的话不就连if的条件都没满足吗,那就相当于没有执行if里面的语句,为什么  if(a[j]>a[j+1]) //会出现这样的情况呢?  {  a[i]+=a[j];  a[j]=a[i]-a[j];  a[i]-=a[j];     } }  }  for(i=0;i<N;i++)  {  printf("%6.2f",a[i]);  }  putchar('\n');  return 0;} 
查看完整描述

3 回答

已采纳
?
望远

TA贡献1017条经验 获得超1032个赞

a[i]+=a[j];
  a[j]=a[i]-a[j];
  a[i]-=a[j];

这是你交换两个数据的代码块,就是因为这种加减运算的方法所以当j==i时数组元素全是0,你可以自己推一推。

 temp=a[j];
  a[j]=a[i];
  a[i]=temp;

改成这样就行了。

查看完整回答
反对 回复 2016-11-14
  • 慕粉1600176492
    慕粉1600176492
    #include"stdio.h" #define N 10 int main() { float a[N]={1.78,1.77,1.82,1.79,1.85,1.75,1.86,1.77,1.81,1.80}; int i,j,temp; for(i=N-1;i>=0;i--) { for(j=0;j<i;j++) //如果在该行for语句中的j<i改为j<=i,则输出的数全变成0.0了。 请问为什么呢 ? { //和自身比较的话不就连if的条件都没满足吗,那就相当于没有执行if里面的语句,为什么 if(a[j]>a[j+1]) //会出现这样的情况呢? { temp=a[j]; a[j]=a[i]; a[i]=temp; } } } for(i=0;i<N;i++) { printf("%6.2f",a[i]); } putchar('\n'); return 0; } 改完了以后,结果全变成了1.00。
  • 慕粉1600176492
    慕粉1600176492
    结果只是从0.0全变成了1.0
  • 慕粉1600176492
    慕粉1600176492
    请无视我的第一个回复。
点击展开后面11
  • 3 回答
  • 0 关注
  • 1586 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信