趣谈排序算法
- 第一大类:内部排序(内存里就能搞定,日常最常用)
-
- [1. 冒泡排序](#1. 冒泡排序)
- [2. 选择排序](#2. 选择排序)
- [3. 插入排序](#3. 插入排序)
- [4. 快速排序](#4. 快速排序)
- [5. 归并排序](#5. 归并排序)
- [6. 堆排序](#6. 堆排序)
- [7. 计数 / 桶 / 基数排序](#7. 计数 / 桶 / 基数排序)
- 第二大类:外部排序(内存装不下,得找硬盘搭伙)
-
- [1. 归并类外部排序(最常用)](#1. 归并类外部排序(最常用))
- [2. 置换选择排序(外部排序"预热选手")](#2. 置换选择排序(外部排序“预热选手”))
- 搞笑实力排位(当个乐子看)
先科普个小知识点:排序分两大派------内部排序(数据都装内存里)和外部排序(数据太多装不下,得靠硬盘帮忙),用大白话讲一遍,秒懂各排序啥脾气、啥实力👇
第一大类:内部排序(内存里就能搞定,日常最常用)
特点:所有待排序数据都能放进内存,操作快、门槛低,日常必用款~
1. 冒泡排序
人设:佛系懒人,只会挨个比大小
隔壁俩数不顺眼就换位置,一轮轮往上冒,像水里冒泡。
✅ 优点:超好写、脑子不用动;
❌ 缺点:慢到离谱,数据一多直接摆烂,新手入门专属凑数选手。
2. 选择排序
人设:强迫症挑货
每次从头遍历,找出最小的放最前面,再找次小的依次排好。
不瞎折腾,但还是老毛病------又笨又慢,比冒泡稍微体面一点点。
3. 插入排序
人设:打牌整理爱好者
像摸扑克牌,拿到一张就往前找合适位置插进去。
小数据贼快、超稳;大数据直接翻车,适合小场面稳一手。
4. 快速排序
人设:暴躁实力派,职场卷王
随便选个基准值,小的放左边、大的放右边,分而治之递归到底。
平均速度封神,编程界内部排序一哥;偶尔运气差翻车拉胯,但不妨碍日常首选。
5. 归并排序
人设:严谨学霸,做事有条不紊
先拆成最小单元,再两两合并有序数组,稳得一批。
速度快、还稳定,就是占内存有点费钱,空间换时间典型代表。
6. 堆排序
人设:深藏不露技术宅
靠二叉堆结构筛选最值,不占额外空间、效率还高。
原理有点绕,不好手写,但性能拉满,低调大佬。
7. 计数 / 桶 / 基数排序
人设:开挂特招生
不做元素比较,靠数值范围直接归类统计。
限定范围里无敌最快,脱离场景直接废,属于"有条件就开挂"的内部排序选手。
第二大类:外部排序(内存装不下,得找硬盘搭伙)
特点:待排序数据量极大(比如百万、千万条),内存装不下,需要硬盘、U盘等外部存储配合,核心是"分而治之",先拆后合。
1. 归并类外部排序(最常用)
人设:耐心打工人,擅长分工合作
核心操作:先把硬盘里的大文件,拆成一个个内存能装下的小文件,分别用内部排序(比如快排、归并)排好序,再把这些有序小文件,两两合并成大的有序文件,直到合并成完整的有序文件。
✅ 优点:稳定、适配各种大数据场景,工业级常用;
❌ 缺点:要频繁读写硬盘,速度比内部排序慢,有点费设备。
2. 置换选择排序(外部排序"预热选手")
人设:高效预热员,减少后续麻烦
专门用来拆分大文件,生成"有序段"(比普通拆分更高效),为后续的归并操作省时间。简单说,就是先把大文件里的数据,筛选出一批有序的小片段,再交给归并排序处理。
主打一个"辅助",不单独完成排序,却是外部排序的高效好帮手。
搞笑实力排位(当个乐子看)
内部排序:快排 > 归并 ≈ 堆排 > 插入 > 选择 > 冒泡
开挂三兄弟(计数 / 桶 / 基数):特定场景直接乱杀
外部排序:归并类外部排序 > 置换选择排序(辅助型)