简介😀
冒泡排序是一种简单但效率较低的排序算法。它重复地扫描待排序元素列表,比较相邻的两个元素,并将顺序错误的元素交换位置,直到整个列表排序完成。
实现🧐
- 以下内容为本人原创,经过自己整理得出,有问题欢迎评论区留言,引用请标明出处,谢谢!🫡
/**
* @author bhlu
* @date 2023-08-16
*
* @brief 冒泡排序
*
* @param[in] data 数字数组
* @param[in] size 数组长度
*
* @return 无
*/
void bubble_sort(int data[], int size)
{
// 按照上图的方法,遍历size-1次
for(int i = 0; i < size - 1; i++)
{
// 标记: 用于判断这次遍历是否了数据,0->修改,1->未修改
int flag = 1;
// 每轮判断的次数,按上图的方法,第一轮是size-1,然后每次都会少一次,可以使用size-1-i
for(int j = 0; j < size - 1 - i; j++)
{
// 将索引指向的数据与索引下一个数据进行比较,大于就换位置
if(data[j] > data[j+1])
{
int swap = data[j];
data[j] = data[j+1];
data[j+1] = swap;
flag = 0; // 改变标记
}
}
if(flag)
// 如果还是1,说明已经排好了,就break
break;
}
}
完整代码🫠
sort.c
#include "sort.h"
/**
* @author bhlu
* @date 2023-08-16
*
* @brief 冒泡排序
*
* @param[in] data 数字数组
* @param[in] size 数组长度
*
* @return 无
*/
void bubble_sort(int data[], int size)
{
// 按照上图的方法,遍历size-1次
for(int i = 0; i < size - 1; i++)
{
// 标记: 用于判断这次遍历是否了数据,0->修改,1->未修改
int flag = 1;
// 每轮判断的次数,按上图的方法,第一轮是size-1,然后每次都会少一次,可以使用size-1-i
for(int j = 0; j < size - 1 - i; j++)
{
// 将索引指向的数据与索引下一个数据进行比较,大于就换位置
if(data[j] > data[j+1])
{
int swap = data[j];
data[j] = data[j+1];
data[j+1] = swap;
flag = 0; // 改变标记
}
}
if(flag)
// 如果还是1,说明已经排好了,就break
break;
}
}
sort.h
#ifndef __SORT_H
#define __SORT_H
#include <stdio.h>
extern void bubble_sort(int data[], int size);
#endif
main.c
#include "sort.h"
int main(void)
{
int data[] = {10, 5, 2, 3, 4, 7, 6};
int size = sizeof(data) / sizeof(data[0]);
printf("排序前: ");
for (int i = 0; i < size; i++)
printf("%d ", data[i]);
printf("\n");
bubble_sort(data, size);
printf("排序后: ");
for (int i = 0; i < size; i++)
printf("%d ", data[i]);
printf("\n");
return 0;
}