排序算法:冒泡排序
- 手机
- 2025-08-28 02:15:02

冒泡排序标准代码(C语言)
c复制代码
#include <stdio.h> // 冒泡排序函数 void bubbleSort(int arr[], int n) { // 外层循环:控制排序轮数 for (int i = 0; i < n - 1; i++) { // 内层循环:控制每轮比较次数 for (int j = 0; j < n - 1 - i; j++) { // 比较相邻元素 if (arr[j] > arr[j + 1]) { // 交换元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr); bubbleSort(arr, n); printf("排序结果:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }核心逻辑分步解析 1. 外层循环 for (i = 0; i < n-1; i++) 作用:控制排序轮数循环次数:n-1 次(例如7个元素需要6轮)原理:每轮确定一个最大值的位置 2. 内层循环 for (j = 0; j < n-1-i; j++) 作用:执行相邻元素比较比较次数:每轮减少i次(已排序部分无需再比较)示例(初始数组 [5,3,8,6]): 轮次比较范围具体操作i=0j从0到3比较全部4对元素i=1j从0到2比较前3对元素i=2j从0到1比较前2对元素 3. 元素交换逻辑
c复制代码
if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } 可视化过程(以 [5,3,8,6] 为例):复制代码
初始 → [5,3,8,6] 第1轮 → [3,5,6,8](8归位) 第2轮 → [3,5,6,8](6已正确) 第3轮 → [3,5,6,8](无交换,排序完成)时间复杂度分析 情况时间复杂度说明最坏情况O(n²)完全逆序(如 9,8,7,6)平均情况O(n²)一般随机数据最好情况O(n)已排序(通过优化可实现)
优化版冒泡排序
增加标志位检测是否已提前有序:
c复制代码
void optimizedBubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { int swapped = 0; // 标志位 for (int j = 0; j < n-1-i; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; swapped = 1; } } if (!swapped) break; // 本轮无交换说明已有序 } }与其他排序算法对比 算法平均时间复杂度空间复杂度稳定性适用场景冒泡排序O(n²)O(1)稳定小数据量或教学用途快速排序O(n log n)O(log n)不稳定大规模数据插入排序O(n²)O(1)稳定基本有序的数据选择排序O(n²)O(1)不稳定小数据量
重点总结 核心思想:通过相邻元素比较和交换,使较大值逐渐"浮"到数组右侧。代码要点: 双循环嵌套结构内层循环范围随轮次缩小(n-1-i)可添加标志位优化提前退出 学习建议: 用纸笔模拟排序过程(如输入 [7,3,5,1,9])对比不同数据量下的性能差异尝试修改为降序排序
上一篇
【插件】前端生成word文件
下一篇
C语言指针学习笔记