冒泡排序法是一种排序算法,例如将int arr[]数组内的元素按照升序排序
原理:比较前后每两个数,较大的数往后排,第一轮下来最大的数就排到了最后。然后再进行第二轮比较,第二大的数也排到倒数第二,以此类推。
第一轮比较:
第一次比较:0,1,5,3,2,1,7,3,5,6 第一个数大于第二个数,调换位置
第二次比较:0,1,5,3,2,1,7,3,5,6 第二个数不大于第三个数,不调换位置
第三次比较:0,1,3,5,2,1,7,3,5,6 第三个数大于第四个数,调换位置
第四次比较:0,1,3,2,5,1,7,3,5,6 第四个数大于第五个数,调换位置
......以此类推
第九次比较:0,1,3,2,1,5,3,5,6,7 第九个数大于第十个数,调换位置
以上完成了第一轮比较,将这一轮的最大数排到了最后面,比较次数9
第二轮比较:
跟第一轮一样,但可以发现,最后一个数字不需要比较,因为它是最大的数,比较次数8
第三轮比较:
比较次数7
......以此类推
第九轮比较:
比较次数1
结论:排列10个数需要比较9轮,每一轮比较的次数由9次递减至1次
代码:
#include<stdio.h>
void main()
{
//定义一个数组
int arr[] = { 1,0,5,3,2,1,7,3,5,6 };
//升序排序
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++)
{
for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - 1 - i; j++)
{
if (arr[j] > arr[j + 1])//如果是降序排列则相反
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
//输出排序后数组
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
}