冒泡排序是最基础的排序算法之一,名字来源于排序过程中,较大的元素像“气泡”一样逐渐“浮”到数组的顶端(或末端)。
一、核心思想
重复遍历要排序的列表,依次比较相邻的两个元素,如果顺序错误(比如前一个比后一个大),就交换它们的位置。 每一轮遍历都会将当前未排序部分的最大(或最小)元素“冒泡”到正确的位置。
- 升序排序:每一轮将最大的元素放到末尾
- 降序排序:每一轮将最小的元素放到末尾
二、代码实现
- 基础版冒泡
int arr[5] = {6, 3, 8, 2, 5}; // 假设5个数据
for (int i = 0; i < 5 - 1; i++) {
// 内层循环:每轮比较相邻元素,范围逐渐缩小
for (int j = 0; j < 5 - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换相邻元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 5 - 1; i++) {
cout << arr[i] << " ";
}
- 优化版冒泡
int arr[5] = {6, 3, 8, 2, 5}; // 假设5个数据
bool swapped; // 标记
for (int i = 0; i < 5 - 1; i++) {
swapped = false; // 标记本轮是否发生交换
for (int j = 0; j < 5 - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true; // 发生了交换
}
}
// 如果本轮没有交换,说明数组已有序,提前退出
if (!swapped) {
break;
}
}
for (int i = 0; i < 5 - 1; i++) {
cout << arr[i] << " ";
}
冒泡排序属于稳定排序。