C语言中冒泡法的改进问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:52:04
for(i=0;i<10&&!swap;i++)

{

swap=1;

for(j=0;j<10-I;j++)

if(a[j]<a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;swap=0;}

}

这段代码中for(i=0;i<10&&!swap;i++) swap=1;搞不懂什么意思,做什么用啊,i<10&&!swap这是什么意思,请高手指点下,这样改进比原来的好在哪里了??

swap变量的设立是检查
上一轮j的循环中是否存在前面一个数比后面一个数小而进行调换的情况存在.
假如不存在就是排序已经完成.可以不用再使i加1来检测了.
比如像一开始已经排好序的队列它就直接退出而不用每次都检查了.

你可以试着用单步调试的形式来仔细看看swap变量的作用.

swap用于判断本次循环中是否有元素交换。如果没有,说明排序结束了,可以提前退出循环。
这样类似1,2,……10这样的顺序序列,就没有必要也循环那么多次了。

不拿分了 顶你俩 睡觉了。。

一个flag
swap = 1 的时候!swap为false
swap = 0 时!swap = true

i<10&&!swap是指i<10与swap不等于1同时成立