算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
动图演示
#include
#include
#include
#include
#include
//交换数值
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//打印数组
void printArray(char msg[],int arr[],int len){
printf("%s:",msg);
for (int i = 0; i < len; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
//冒泡排序
void bubble_sort(int a[],int len){
for(int i=0;i
for(int j=0;j
if(a[j]>a[j+1]){
swap(&a[j],&a[j+1]);
}
}
printf("第%d轮",i+1);
printArray("",a,len);
}
}
int main()
{
int len=10;
int arr[len];
srand((unsigned)time(NULL));
//随机生成长度为"len"的数组
for(int i=0;i
arr[i]=rand()%200;
}
printArray("未排序前",arr,len);
bubble_sort(arr,len);
printArray("冒泡排序",arr,len);
//防止windows下控制台窗口闪退
int s;
scanf("%d",&s);
return 0;
}
结果:
未排序前:154 140 168 88 99 138 173 62 51 153
第1轮:140 154 88 99 138 168 62 51 153 173
第2轮:140 88 99 138 154 62 51 153 168 173
第3轮:88 99 138 140 62 51 153 154 168 173
第4轮:88 99 138 62 51 140 153 154 168 173
第5轮:88 99 62 51 138 140 153 154 168 173
第6轮:88 62 51 99 138 140 153 154 168 173
第7轮:62 51 88 99 138 140 153 154 168 173
第8轮:51 62 88 99 138 140 153 154 168 173
第9轮:51 62 88 99 138 140 153 154 168 173
冒泡排序:51 62 88 99 138 140 153 154 168 173