
C语言数据结构系列排序基础篇C语言数据结构系列十八排序基础——冒泡与选择一、前言二、冒泡排序2.1 思想2.2 图解2.3 代码实现三、选择排序3.1 思想3.2 图解3.3 代码实现四、复杂度对比五、下篇预告C语言数据结构系列十八排序基础——冒泡与选择本篇目标掌握冒泡排序和选择排序的原理与实现摘要本文介绍两种最基础的排序算法——冒泡排序与选择排序。冒泡排序通过相邻元素两两比较、逆序交换每轮将最大值冒泡到末尾并支持提前终止优化选择排序则每轮从未排序部分选出最小值放到已排序部分末尾。两者时间复杂度均为 O(n²)空间复杂度 O(1)其中冒泡排序稳定、选择排序不稳定。文中配有图解、C 语言实现与复杂度对比帮助读者快速掌握排序入门核心。一、前言哈喽小伙伴们今天我们开始学习排序算法先来两个最基础的冒泡排序相邻比较大的往后冒选择排序每次选最小的放前面二、冒泡排序2.1 思想 相邻元素比较如果逆序就交换每轮把最大的冒泡到最后2.2 图解第1轮第2轮第3轮[5,3,8,1][3,5,1,8][3,1,5,8][1,3,5,8]2.3 代码实现voidbubbleSort(intarr[],intn){for(inti0;in-1;i){bool swappedfalse;for(intj0;jn-1-i;j){if(arr[j]arr[j1]){inttemparr[j];arr[j]arr[j1];arr[j1]temp;swappedtrue;}}if(!swapped)break;// 优化没有交换说明已有序}}三、选择排序3.1 思想 每次从未排序部分选最小的放到已排序部分末尾3.2 图解选最小1选最小3选最小5[5,3,8,1][1,3,8,5][1,3,8,5][1,3,5,8]3.3 代码实现voidselectionSort(intarr[],intn){for(inti0;in-1;i){intminIdxi;for(intji1;jn;j){if(arr[j]arr[minIdx]){minIdxj;}}if(minIdx!i){inttemparr[i];arr[i]arr[minIdx];arr[minIdx]temp;}}}四、复杂度对比算法最好最坏平均空间稳定性冒泡O(n)O(n²)O(n²)O(1)✅选择O(n²)O(n²)O(n²)O(1)❌稳定性相同值的元素排序后相对位置不变五、下篇预告下一篇我们将学习插入排序和希尔排序 冒泡可以提前终止选择不行