爱问知识人 爱问教育 医院库

小弟在学习C 的冒泡排序时遇到这样一个疑问现向大家请教:

首页

小弟在学习C 的冒泡排序时遇到这样一个疑问现向大家请教:

小弟在学习C++的冒泡排序时遇到这样一个疑问:
#include <iostream.h>
void main()
{
int a[6]={1,7,3,12,9,5};
int i,j,t,flag;
for(i=0;i<5;i++)
flag=0;
for(j=0;j<6-i-1;j++)
if(a[j]>a[j+1])
{
 t=a[j+1];
 a[j+1]=a[j];
  a[j]=t;
  flag=1;
}
if(flag==0)break;
for(i=0;i<6;i++)
cout<<a[i]<<endl;
}
我想问一下,int flag的作用是什么?不定义flag,没有“flag=0;”和“flag=1;”及“if(flag==0)break;”
行不行?谢谢!

提交回答
好评回答
  • 2004-12-21 16:27:23
    1 flag标志用来判断当前是否已经有序。当一趟排序结束后,如果flag=0者表示没有发生过交换,数组已经有序,无需再做下去。
    2 程序比较次数由双重循环变量i,j控制。所以说去处flag后程序完全可以正常运行,不会出现死循环,也可以得到正确的结果。
    3 那么为什么加flag呢,从第一点可以看出,并不是所有的数据都要做完所以的比较(n个数需要n-1趟比较),很多情况下比较几此后数据已经有序,此时如果有flag标志的话就可以及早结束程序得到结果。而没有flag的话必须做完n-1趟比较。
    所以,flag主要提高效率。举一个极端例子,假定原始数据已经有序,有flag标志只要比较一趟。而没有flag标志要比n-1趟.

    傲***

    2004-12-21 16:27:23

其他答案

    2004-12-21 08:56:35
  • 应该是没有影响的,你可以去看看冒泡的算法,窝同意一楼的说法

    n***

    2004-12-21 08:56:35

  • 2004-12-20 19:25:53
  • flag不能去掉,冒泡程序就是一次比较数组相近的两个数,然后不停的把小些的那个数往数组前面移.
    而flag的作用就是看看是否已经把小些的数移到相应位置了.
    1号for循环:for(i=0;i<5;i++)有六个数,所以执行五次循环
    2号for循环:for(j=0;j<6-i-1;j++)每个数要经过6-i-1次循环才能移到相应的位置
    2号是嵌套在1号里面的,所以2号循环完才会再次循环1号.
    在2号循环中一旦数组数字改变位置了,flag就会为非0.也就是说此时这个数字还未到达指定位置,有了if(flag==0)break;那么在数字还未达到指定位置之前是不会输出这个数字的(要不然排序岂不错误了)

    残***

    2004-12-20 19:25:53

  • 2004-12-20 19:19:57
  • flag应该是个自定义的标志变量,如果发生过位置,就把flag设为1,否则为0,也就是说这个flag是用来判断原数组是否为有序数组的。不定义flag,没有“flag=0;”和“flag=1;”及“if(flag==0)break;”对冒泡排序本身没有影响

    深***

    2004-12-20 19:19:57

类似问题

换一换
  • 软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):