网站公告列表

  没有公告

加入收藏
设为首页
联系我们
您现在的位置: 山东在线 >> 生活百问 >> 电脑互联网 >> 软件 >> 正文
  小弟在学习C 的冒泡排序时遇到这样一个疑问现向大家请教:           ★★★
小弟在学习C 的冒泡排序时遇到这样一个疑问现向大家请教:
作者:搜集 文章来源:阿达 更新时间:2007-6-7 2:21:15
小弟在学习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;”
行不行?谢谢!
最佳答案此答案由提问者自己选择,并不代表新浪爱问知识人的观点 回答:wm3699
级别:新手
2004年12月21日 1 flag标志用来判断当前是否已经有序。当一趟排序结束后,如果flag=0者表示没有发生过交换,数组已经有序,无需再做下去。
2 程序比较次数由双重循环变量i,j控制。所以说去处flag后程序完全可以正常运行,不会出现死循环,也可以得到正确的结果。
3 那么为什么加flag呢,从第一点可以看出,并不是所有的数据都要做完所以的比较(n个数需要n-1趟比较),很多情况下比较几此后数据已经有序,此时如果有flag标志的话就可以及早结束程序得到结果。而没有flag的话必须做完n-1趟比较。

所以,flag主要提高效率。举一个极端例子,假定原始数据已经有序,有flag标志只要比较一趟。而没有flag标志要比n-1趟.
揪错 ┆ 评论 ┆ 举报 提问者对答案的评价: 感谢wm3699的精彩解答 其他回答  如果有了满意的回答请及时采纳,不要辜负了回答者 怎样采纳答案 回答:深_蓝2001
级别:学弟
2004年12月20日 flag应该是个自定义的标志变量,如果发生过位置,就把flag设为1,否则为0,也就是说这个flag是用来判断原数组是否为有序数组的。不定义flag,没有“flag=0;”和“flag=1;”及“if(flag==0)break;”对冒泡排序本身没有影响
评论 ┆ 举报 回答:peach
级别:学弟
2004年12月20日 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;那么在数字还未达到指定位置之前是不会输出这个数字的(要不然排序岂不错误了)
评论 ┆ 举报 回答:noah_fz
级别:新手
2004年12月21日 应该是没有影响的,你可以去看看冒泡的算法,窝同意一楼的说法
评论1 ┆ 举报
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:

  • 毛新宇:20岁毛岸英写…

    上世纪50年代,中国特…

    美国总统选举制度九易…

    67年前副官刘厚总枪杀…
     请帮我指点前期战斗副本天赋
     休闲野德装备收集指南
     猎人全按键键盘设置
     实在是看不下去了
     我个人的野性平衡德天赋
     纯副本输出平衡德天赋
     小白的术士天赋
     请高人点评我的竞技场天赋
    【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    山东在线 Copyright@2006-2008 鲁ICP备07018514号 中国网通集团公司山东省分公司