冒泡法排序:指的是在排序时,从前往后扫描待排序记录,每次比较数组中相邻的两个数组元素的值,将较小的数(按从小到大排列)排在较大的数前面。
例子:将9,6,15,4,2从小到大进行排列。
过程:第一趟将9与后面元素比较得到:6,9,4,2,15
第二趟将6与后面元素比较得到:6,4,2,9,15
第三趟将6与后面元素比较得到:4,2,6,9,15
第四趟将4与后面元素比较得到:2,4,6,9,15
思考:一共有5个元素比较了4趟,第一趟比较了4次确定了最大的值,第二趟比较了三次确定了倒数第二个值,以此类推,每趟比较的次数比上一次少1。设i为躺数,len为元素个数,j为每一趟的执行次数,则:i<len-1 j<len-1-i
代码实现:
#include<stdio.h>
int main()
{
int arr[]={9,6,15,4,2};
int i,j;
printf("排序前:\n");
int len=sizeof(arr)/sizeof(arr[0]);
for( i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
printf("排序后:\n");
for(i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
运行结果: