1.什么是冒泡排序
博主是个白痴,本篇博文以白痴的视角去看看什么是冒泡排序。冒泡排序说的是计算机语言中排序的一种算法。那么什么是排序呢?就是说我们现在有一组无序的数,现在我们想让他变成有序的,也许是从小到大排序,也许是从大到小排序。因为这种算法就好像可口可乐气泡最终会上浮到顶端一样,故名“冒泡排序”。
2.冒泡排序的图例
假设我们现在有一个数组,数组里面放着9,8,7,6,5,4,3,2,1,0这10个数,然后我们想把它排成升序!怎么搞呢!
步骤一:1️⃣冒泡排序比较相邻的元素。如果第一个比第二个大,就交换他们两个。那我就比较 9 和 8,我发现9比8大,那我就交换它们。
交换好后:
2️⃣然后呢。我再比较9和7,我发现9比7大,那我就交换它们。
交换好后:
3️⃣ 按照上面的方法依次交换:
4️⃣
5️⃣
6️⃣
7️⃣
8️⃣
9️⃣
第一趟排序总览图:
就这样,第一趟经过了9步后,9作为最大的数排在了最后。而蓝色的数字依然没有排序。所以只需要用上述的方法,把蓝色的数字876543210经过排序即可。
第二趟排序结果图:
第三趟排序结果图:
第四趟排序结果图:
第五趟排序结果图:
第六趟排序结果图:
第七趟排序结果图:
第八趟排序结果图:
第九趟排序结果图:
3.代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void Bubble_sort(int arr[], int sz)
{
int i = 0;
int j = 0;
int temp = 0;
int flag = 1; //flag在后面的作用是当数组有序的时候就跳出了,为了提高效率
for (i = 0; i < sz-1; i++) //10个元素共需要9趟排序
{
for (j = 0; j < sz - 1-i; j++) //第一趟排序10个数需要比较9次,
//第二趟排序只需要排前面的未排序的9个数,只需要比较8次即可...因此需要-i
{
if (arr[j] > arr[j + 1]) //交换数组元素
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 0;
}
}
if (flag == 1)
break;
}
}
int main()
{
int i = 0;
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };//待排序的数组
printf("排序前的数组为:\n");
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素的个数
Bubble_sort(arr, sz);
printf("排序后的数组为:\n");
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}