冒泡排序

[复制链接]
查看11 | 回复6 | 2008-4-8 20:01:32 | 显示全部楼层 |阅读模式
这句控制冒泡的内循环是否已经将数据变为有序:若在while循环内,经过for循环,没有执行if分支,则说明不存在逆序的情况,此时done未被赋值false(为true),则不需要再while循环。如果没有此句,即使数据经过一趟排序,已经有序,也要完成所有循环。
回复

使用道具 举报

千问 | 2008-4-8 20:01:32 | 显示全部楼层
起一个开关的作用,bool done=false//声明一个bool类型的变量done并且给他赋值为false 就像声明一个int 类型的 i 赋值为100道理是一样的。bool类型就两个值false 或者true;所以如果done=false,那么!done=true!!!请看注释;public void Sort(int[] list) { int i,j,temp; bool done=false; //声明bool型变量donej=1; while((jlist[i+1]) { done=false; //特别注意,如果done未置为true那么下次就少进行一次while循环temp=list; list=list[i+1]; list[i+1]=temp; } } j++; }
回复

使用道具 举报

千问 | 2008-4-8 20:01:32 | 显示全部楼层
加上done就会少一些不必要的循环吧。
回复

使用道具 举报

千问 | 2008-4-8 20:01:32 | 显示全部楼层
第一个:bool done = false; 意思就是告诉下面要循环的int数组里的数字没有达到按从小到大排序第二个:while((j<list.Length)&&(!done)) 处,第一看个条件不用说, 第二个是用来看,我数组里是否还存在上下两个数之间,上面的数大于下面的数第三个:done=true; 就是在新的这次while循环中,先认为数组中的数已经是从小到大排序了,没问题了,然后进入下面的for循环第四个:done=false;就是告诉后面的循环,当前做了一次上下两个数之间的调换,有可能调换后,被向下调换的数的之下还有比他小的数,让后续程序继续调换不知道你明白我的意思没
回复

使用道具 举报

千问 | 2008-4-8 20:01:32 | 显示全部楼层
这样可能会少比较几次 节省资源 可以省掉
回复

使用道具 举报

千问 | 2008-4-8 20:01:32 | 显示全部楼层
bool done = false;这里是声明 一个done它是做为一个标识符(可以认为是一个标签)决定后面代码的运行(!done)因为前面已经为done赋值为false'!'代表'非''!false'即是'ture'也就是说(!done)这个条件为真while 是一个循环它里面的条件为它运行的条件当j<list.Length为真并且(!done)为真时则执行while循环里面的语句后面两个done都是为了判断还需不需要进行while 循环一件事情的实现方法有很多种你可以去掉这一句但是下面就不能用done了而且代码要做点发改动不知这样回答你是否满意
回复

使用道具 举报

千问 | 2008-4-8 20:01:32 | 显示全部楼层
冒泡
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行