尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

9.冒泡排序:像鱼缸泡泡一样的简单排序算法

9.冒泡排序:像鱼缸泡泡一样的简单排序算法 一、什么是冒泡排序冒泡排序Bubble Sort是一种简单直观的排序算法它的核心思想是通过相邻元素的比较和交换让较大的元素像鱼缸里的泡泡一样 “浮” 到数组的末尾重复这个过程直到所有元素排序完成。简单来说冒泡排序就像鱼缸里的泡泡每次只比较相邻的两个元素如果前面的元素比后面的大就交换它们的位置一轮结束后最大的元素会 “浮” 到数组的最后重复这个过程直到所有元素都排好序。二、冒泡排序的核心步骤冒泡排序的核心步骤可以分为以下几步遍历数组从第一个元素开始遍历整个数组相邻比较比较当前元素和下一个元素的大小交换位置如果前面的元素比后面的大就交换它们的位置重复继续遍历下一个位置直到所有元素排序完成。三、冒泡排序的代码实现1. 基础版本#include stdio.h // 交换两个元素 void swap(int* a, int* b) { int temp *a; *a *b; *b temp; } // 冒泡排序 void bubbleSort(int arr[], int n) { for (int i 0; i n - 1; i) { // 每一轮将最大的元素“浮”到末尾 for (int j 0; j n - i - 1; j) { // 相邻比较前面比后面大就交换 if (arr[j] arr[j 1]) { swap(arr[j], arr[j 1]); } } } } // 打印数组 void printArray(int arr[], int n) { for (int i 0; i n; i) { printf(%d , arr[i]); } printf(\n); } int main() { int arr[] {5, 2, 6, 1, 4, 3}; int n sizeof(arr) / sizeof(arr[0]); printf(排序前); printArray(arr, n); bubbleSort(arr, n); printf(排序后); printArray(arr, n); // 输出1 2 3 4 5 6 return 0; }2. 优化版本提前结束如果某一轮没有发生任何交换说明数组已经有序可以提前结束排序#include stdio.h #include stdbool.h // 交换两个元素 void swap(int* a, int* b) { int temp *a; *a *b; *b temp; } // 优化的冒泡排序提前结束 void optimizedBubbleSort(int arr[], int n) { for (int i 0; i n - 1; i) { bool swapped false; // 标记本轮是否发生交换 for (int j 0; j n - i - 1; j) { if (arr[j] arr[j 1]) { swap(arr[j], arr[j 1]); swapped true; // 标记本轮发生了交换 } } // 如果本轮没有发生交换说明数组已经有序提前结束 if (!swapped) { break; } } } // 打印数组 void printArray(int arr[], int n) { for (int i 0; i n; i) { printf(%d , arr[i]); } printf(\n); } int main() { int arr[] {5, 2, 6, 1, 4, 3}; int n sizeof(arr) / sizeof(arr[0]); printf(排序前); printArray(arr, n); optimizedBubbleSort(arr, n); printf(排序后); printArray(arr, n); // 输出1 2 3 4 5 6 return 0; }四、冒泡排序的时间复杂度和空间复杂度时间复杂度O (n²)因为需要两层循环每层循环的时间复杂度都是 O (n)空间复杂度O (1)只需要常数级别的额外空间稳定性稳定因为交换操作不会改变相同元素的相对位置。五、冒泡排序的优缺点优点实现简单代码逻辑清晰容易理解和实现空间复杂度低不需要额外的内存空间稳定不会改变相同元素的相对位置可提前结束如果数组已经有序可以提前结束排序。缺点时间复杂度高O (n²)不适合大规模数据排序效率低即使数组已经有序仍然需要 O (n²) 的时间复杂度除非优化提前结束。六、冒泡排序的实际应用场景冒泡排序虽然效率不高但在以下场景中仍然有用小规模数据排序当数据量较小时冒泡排序的实现简单性能可以接受教学和学习冒泡排序是理解排序算法的基础适合初学者学习排序的基本思想稳定性要求高的场景比如排序的元素是对象需要保持相同元素的相对位置。七、总结冒泡排序是一种简单直观的排序算法它的核心思想是通过相邻元素的比较和交换让较大的元素像鱼缸里的泡泡一样 “浮” 到数组的末尾重复这个过程直到所有元素排序完成。冒泡排序的时间复杂度是 O (n²)空间复杂度是 O (1)虽然效率不高但实现简单稳定适合小规模数据排序和教学学习。希望这篇文章能帮助你理解冒泡排序的原理和实现
返回列表