前言:
作者简介:爱吃大白菜1132
人生格言:纸上得来终觉浅,绝知此事要躬行
如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!
如果觉得博主文章还不错的话,希望三连支持!
冒泡排序介绍
定义:冒泡排序(Bubble Sort)是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
解释一下图片中10个元素为什么进行9趟冒泡排序?
按照规律应该是10趟,但在完成9趟冒泡时,9位元素已经就位,因此第十个数就已经其他数原因也就位了。就好比有5个小朋友按顺序分五个凳子,前四个已经排好了,第五个就不需要再排就知道应该在哪里了。
代码实现
#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
int i = 0;
//确定冒泡排序的趟数
for (i = 0; i < sz - 1; i++)
{
int j = 0;
flag = 1;
//对两个数比大小
for (j = 0; j < sz - 1 - i; j++)
{
//调换前后数据
if (arr[j] >arr[j + 1])
{
int tap = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tap;
}
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);//冒泡排列
for (i = 0;i < sz;i++)
{
printf("%d ", arr[i]);//打印排列好的数组
}
return 0;
}
上面这个是基础版,下面再提供一个进阶版
#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
int i = 0;
//确定冒泡排序的趟数
int flag = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
flag = 1;
//对两个数比大小
for (j = 0; j < sz - 1 - i; j++)
{
//调换前后数据
if (arr[j] >arr[j + 1])
{
int tap = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tap;
flag = 0;//本躺需要排序
}
}
if (flag == 1)//检查本趟是否还需要再进行排列
{
break;
}
}
}
int main()
{
int arr[] = { 9,1,2,3,4,5,6,7,8,};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);//冒泡排列
for (i = 0;i < sz;i++)
{
printf("%d ", arr[i]);//打印排列好的数组
}
return 0;
}
这个进阶版在冒泡排序中加入了一个if判断,若正在进行的这一趟冒牌排序已经有序,那么直接跳出第二个for循环可以节省内存。