冒泡排序是一种简单的排序算法,通过重复比较相邻元素并交换位置,使较大的元素逐渐“浮”到数组末尾。其核心思想如下:
1. 比较与交换:遍历数组,比较相邻元素,若前者大于后者则交换。
2. 多轮遍历:重复上述过程,每轮确定一个最大元素的位置,后续遍历无需比较已排序部分。
3. 时间复杂度:平均和最坏情况为O(n²),最好情况(已排序)为O(n),属于稳定排序。
经典C语言冒泡排序代码
include <stdio.h>
void bubbleSort(int arr, int n) {
for (int i = 0; i < n - 1; i++) { // 外层循环控制轮数
for (int j = 0; j < n - i - 1; j++) { // 内层循环处理未排序部分
if (arrj > arrj + 1) { // 比较相邻元素
// 交换元素
int temp = arrj;
arrj = arrj + 1;
arrj + 1 = temp;
}
}
}
}
int main() {
int arr = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr0);
printf("原始数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arri);
}
bubbleSort(arr, n);
printf("\n排序后数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arri);
}
return 0;
}
代码解析
1. 外层循环 (`i`):共执行`n-1`次,每轮确定一个最大元素的位置。
2. 内层循环 (`j`):处理未排序部分(前`n-i`个元素),比较`arrj`和`arrj+1`。
3. 交换操作:若顺序错误,使用临时变量`temp`交换相邻元素。
示例输出
原始数组:
64 34 25 12 22 11 90
排序后数组:
11 12 22 25 34 64 90