数据量 | 冒泡排序耗时 | 快速排序耗时 |
10个数 | 几乎瞬间 | 几乎瞬间 |
100个数 | 毫秒级 | 毫秒级 |
10000个数 | 明显卡顿 | 仍然很快 |
数据量 <100 的时候,冒泡和快排的差距,就像走路和开车去楼下便利店——都能到,没必要纠结。
一句话总结
冒泡排序不是"最好"的算法,但它是最容易理解的算法。学排序,从冒泡开始;用排序,按场景选择。
核心逻辑其实就三层嵌套,拆开来很好理解:
外层循环 i:控制"跑几轮"。n 个数最多跑 n-1 轮,每跑完一轮,当前最大的数就"冒泡"到末尾了。所以每多跑一轮,末尾就多一个已排好的数,下一轮的比较范围就可以少一个。
内层循环 j:控制"每轮比几次"。从第 1 个元素开始,依次和下一个比较,比到 n-i 的位置就停(后面已经排好了,不用再比)。
交换逻辑:每一对相邻元素,如果前一个比后一个大,就用 temp 中间变量把它俩换过来;否则不动,继续保持原样。
一句话记忆: 外圈控轮次,内圈比相邻,前大就交换,一轮冒一个泡。
成品验证
回看初始数组,我们给的初值是乱序的:
5, 2, 8, 1, 9, 3, 7, 4, 6, 10
运行程序后,数组变成了:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
从上图监控画面可以清楚看到,arr[1] 到 arr[10] 已经按从小到大整齐排列,冒泡排序完成。
验证小技巧:实际项目中,可以在程序末尾加一个完成标志位(比如 bSortDone := TRUE),方便HMI上直观显示"排序已完成",也便于后续调试排查。
冒泡排序,一句话说透:
相邻两个数比大小,大的往后挪、小的往前冒,一轮下来最大值"浮"到末尾,反复冒,直到全部排好。
优点:
逻辑极简,初学者 10 分钟就能看懂、写出来
原地排序,不占额外内存,只交换数组本身的位置
数据量小(几十个元素以内)时,完全够用
缺点:
时间复杂度 O(n²)——数据量翻 10 倍,耗时翻 100 倍
数据量一大(几百上千个元素),性能断崖式下降,明显卡顿
工业现场大量数据排序场景,优先选用快速排序、归并排序等更高效的算法
一句话总结:小数据用它,简单够用;大数据换算法,别硬扛。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!