C语言的冒泡排序法的问题

来源:百度知道 编辑:UC知道 时间:2024/05/08 06:58:01
#include <stdio.h>

void main()
{
int i,j,a[5]={12,25,43,2,65};

for(i=0;i<4;i++) 这个我知道是循环次数
{
for(j=0;j<5-i-1;j++) 那这个循环是什么意思呢
{
if(a[j]<a[j+1])这个判断是什么意思
{
int t;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}

for(i=0;i<5;i++)
{
printf("%d\t",a[i]);
}

printf("\n");

就像上面的那个程序,总共是五个数,那么需要排四次数,即先把第一个数与后面的数相比,再与再后面的数相比。如果第一个数排好了后,第二次排时便不需要再与最后一个数相比了,因为最后的一个数已经是排好的最小的那个了,这时需要排三次了,for循环里面的那一个for循环正是控制次数的,而里面那个if语句是判断正在排序之数与它所处位置后面的一个数的大小了,如果比后面一个数大,就不用动了,而要是比后面一个数小,就交换一下位置,而交换位置的语句便是if里面的那三条语句了!

您首先要知道思路
知道思路才容易理解 思路都不懂 不用看代码了
除非你能看代码 了解思路

for(i=0;i<4;i++) //这个我知道是循环次数
for(j=0;j<5-i-1;j++) //那这个循环是什么意思呢
if(a[j]<a[j+1]) //这个判断是什么意思

上面的i取一个数时,例如i=0,那就是用a[0]分别和a[j](a[0],a[1]...a[5-i-0])相比,如果a[j]<a[j+1](例如a[0]<a[1]),执行下面的花括号里的指令,也就是两数互换(小的放前);然后再取i=1,循环...

这个是冒泡排序法,但是好像有点错误啊!

for(j=0;j<5-i-1;j++) 那这个循环是什么意思呢 :二重循环,从5-i-1开始,相邻两个比较,如i=0时 0 和1,1和2,3和3... 下一个语句《if(a[j]<a[j+1])》就是比较相邻的元素的大小的,如果不是按顺序的就交换位置