关于冒泡排序的一个问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 05:38:41
void Bublesort(RECNode*r int n)
{
int i,j;
RECNode temp;
for(i=0,i<n-1;i++)
for(j=n-2,j>=i,j--)
{
if(r[j+1].key<r[j].key)
{
temp=r[j+1];
r[j+1]=r[j];
r[j]=temp;
}
}
}
这是书上的冒泡排序算法,我一直弄不明白在第二个FOR循环里面
为什么 “ j>=i ”望知道的人跟我解释一下,先谢谢了

外层循环每进行一次,就排好一个数据,所以 i 之前的数据都不要去排了

只有当J大于等于I的时候下面的循环部分才有意义

for(j=n-2,j>=i,j--) 等价于for(j>=i;j<=n-2;j++)

设n=10.

当i=0, j=0-8,即比较r[0]与r[1], ... ,r[8]与r[9], 这一次最大的数字已经冒泡到了数组末尾,即r[9].

当i=1, j=0-78,即比较r[0]与r[1], ... ,r[78]与r[8], 这一次第二大的数字已经冒泡到了数组倒数第二位置,即r[8].

................

因为是冒泡排序,所以最主要的是冒泡,第一个for负责比较的次数,而第二个for则是负责在这次比较中和这个数后面的所有的数进行比较。如1,2,4,5,67,4,3,4,第一次时1需要和他后面的所有数比较一样