冒泡法排序
一、原理:
1、对于冒泡法的原理,可在如下原理图来解释:
横轴为j;纵轴为i;在几轮几次的循环中找到两者的变化关系以及循环关系。
2、在程序中,使用到的sizeof,可通过本篇文章学习经典数值交换案例。
二、演示:
1、代码:
#include <stdio.h>
int main()
{
int array[]={12,8,13,9}; //用少的数据来推进
int i;
int j;
int len=sizeof(array)/sizeof(array[0]); //用sizeof关键字,可以不用在意数组里的元素有多少
int temp;
for(i=0;i<len-1;i++){ //从上述原理图即可明白
for(j=0;j<len-i-1;j++){ //对于j的取值,要考虑到,不同的i对应的j的最大值不一样,所以j的取值一定与i相关。
if(array[j]<array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
return 0;
}
2、编译结果:
三、sizeof 的妙用
在本案例中,只是四个数的冒泡排序,凭借 sizeof 完全实现n个数的冒泡排序。
下图为只改变数组元素个数的操作,改为10个元素。
代码:
#include <stdio.h>
int main()
{
int array[]={12,8,13,9,13,24,56,34,46,50}; //用少的数据来推进
int i;
int j;
int len=sizeof(array)/sizeof(array[0]); //用sizeof关键字,可以不用在意数组里的元素有多少
int temp;
for(i=0;i<len-1;i++){ //从上述原理图即可明白
for(j=0;j<len-i-1;j++){ //对于j的取值,要考虑到,不同的i对应的j的最大值不一样,所以j的取值一定与i相关。
if(array[j]<array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
return 0;
}
编译结果:
总结:对于冒泡法排序问题,先用含有少量元素的数组进行排序演示(记不起来的时候,都可以画画图),以便弄清i和j的关系,用sizeof的妙用来简便操作数组元素的更改。
简单排序法