介绍
据我理解,冒泡排序的实质就是将数组中相邻的两个元素进行比较,将大的向后移动,外层的for循环负责控制进行多少轮比较,内层的for循环负责控制具体比较的次数。由于是两两比较,所以一共要比较长度-1轮。又因为每一轮比较都会把一个极值排到尾部或首部,所以每比较一轮,下轮就可以少比较一次。另外冒泡排序的复杂度是N2,而且在交换过程中不会移动位置,是一种稳定的排序算法。
下面是C语言代码实现:
#include<stdio.h>
int main(){
int a[]={12,44,48,8,26,33,2,15,5,4,5,7,8,6};
int len=sizeof(a)/sizeof(a[0]);
int i=0,j=0,t=0;
for(i=0;i<len-1;i++){
for(j=0;j<len-1-i;j++){//实质就是两两相比,将最小或最大的数放在队首或队尾;一次外层循环就排好好一个极限值,下次就可以少排一次
if(a[j]>a[j+1]){//从小到大排列
// if(a[j]<a[j+1]){//从大到小排列
t=a[j];//两两交换位置
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(int k=0;k<len;k++){
printf("%3d",a[k]);
}
return 0;
}
另外C语言中数组不是对象,所以没有length方法,但是数组长度可以用sizeof()方法实现。 sizeof(a)是数组地址的总长度,sizeof(a[0])是指数组中下标为0的元素所占的地址长度。
网友评论