嵌入式学习-02_数据结构和算法 (冒泡算法)
1.冒泡排序
1.1 算法原理
冒泡排序原理如下:
(1)比较相邻元素: 从数组的第一个元素开始,依次比较相邻的两个元素。
(2)交换位置: 如果前面的元素比后面的元素大(或小,根据升序或降序排序的要求),则交换这两个元素的位置。
(3)一趟遍历完成后,最大(或最小)元素已移至末尾: 经过一趟遍历,最大(或最小)的元素会被交换到数组的最后一个位置。
(4)重复进行遍历和交换: 除了最后一个元素,对数组中的所有元素重复执行上述两步,每次遍历都会将当前未排序部分的最大(或最小)元素放置到合适的位置。
(5)循环遍历: 重复执行步骤3和步骤4,直到整个数组都被排序。
1.2代码实现
#include <stdio.h>
/**
* @brief 冒泡排序
* @param int *arr 要排序的数组
* @param size_t len 数组长度
*/
void bubbleSort(int *nums, size_t len)
{
// 外层循环轮数
for (size_t c = 1; c < len; c++)
{
// 内层控制交换
for (size_t i = 0; i < len - c; i++)
{
// 如果前面的元素比后面的元素大,交换两个元素
if (nums[i] > nums[i + 1])
{
int temp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = temp;
}
}
}
}
// 遍历数组中的元素
void printArr(int *arr, size_t len)
{
for (size_t i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
// 定义数组
int nums[8] = {30, 87, 23, 1023, 1, 5, 41, 2};
size_t len = sizeof nums / sizeof(int);
printf("排序前:\n");
printArr(nums, len);
bubbleSort(nums,len);
printf("排序后:\n");
printArr(nums, len);
return 0;
}
printf("排序后:\n");
printArr(nums, len);
return 0;
}