学习了冒泡法之后才逐渐发觉了C语言的难处,冒泡法在第一次接触时,极容易在逻辑上犯错,导致思维转不过来。
首先,在定义时,为了优化代码,采用了int len = sizeof(a)/sizeof(int)为下面代码所用的数字。由于int型固定为4字节,而主要根据数组a里的个数所确定len的数字。
下面是冒泡法的代码:
#include <stdio.h>
int main()
{
int a[10]={3,5,2,234,4567,87,23,8,90,10};
int x,y,temp;
int len=sizeof(a) / sizeof(int);
for(x = 0;x < len -1;x++)
{
for(y = 0;y < len-x-1;y++)
{
if(a[y] > a[y+1])
{
temp = a[y];
a[y] = a[y+1];
a[y+1] = temp;
}
}
for(y = 0;y < len ;y++)
{
printf("%d ",a[y]);
}
printf("\n");
}
return 0;
}
其中,因为假如10个数字,则len为10,外循环为两个数比大小,最多只有9次,所以为len-1,而剩下的数循环的次数则是减去之前的数循环次数来定的,所以为len-x-1。
冒泡法的核心,就是中间的if判断语句,根据此语句,将大小不一的数字顺序排放。