野牛程序员讲少儿编程之插入排序(C++ 版)-整理扑克牌的艺术!
作者:野牛程序员:2025-03-17 10:32:39C++阅读 2067
野牛程序员讲少儿编程之插入排序(C++ 版)-整理扑克牌的艺术!
🤔 孩子:排序有啥用?
"整理书包、给玩具分类、比赛排名,这些不都是排序嘛!"
今天,来跟野牛程序员学一种超级实用的排序算法——插入排序(Insertion Sort)!
它就像整理扑克牌一样,拿到一张新牌,找到合适的位置插进去,让手上的牌保持从小到大有序。
🎯 插入排序到底是个啥?
插入排序的核心思想就两个字:插入!
想象手里有一叠扑克牌,正在从左到右整理,每次拿起一张新牌,把它插入到正确的位置,让整个牌序保持有序。
插入排序的步骤如下:
从第二个元素开始(第一个默认是有序的)。
把当前元素拿出来,和前面的已经排序的部分进行比较。
找到比它小的元素后,把它插入到正确的位置。
重复这个过程,直到所有元素都放到正确的位置上。
🏆 可视化理解(手动模拟一遍)
假设有个数组 [64, 25, 12, 22, 11]
,用插入排序给它排序。
轮次 | 数组状态 | 说明 |
---|---|---|
初始 | 64, 25, 12, 22, 11 | 初始数组 |
第 1 轮 | 25, 64, 12, 22, 11 | 25 插入到 64 前面 |
第 2 轮 | 12, 25, 64, 22, 11 | 12 插入到 25 前面 |
第 3 轮 | 12, 22, 25, 64, 11 | 22 插入到 25 前面 |
第 4 轮 | 11, 12, 22, 25, 64 | 11 插入到最前面 |
结束 | 11, 12, 22, 25, 64 | 排序完成 ✅ |
🔥 C++ 代码示例
学了编程的孩子是未来的黑客!
来看 C++ 代码,理解如何让计算机帮忙排序!
#include <iostream> using namespace std; // 插入排序函数 void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { // 从第二个元素开始 int key = arr[i]; // 选定当前要插入的元素 int j = i - 1; // 向左移动比 key 大的元素 while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; // 把大元素往后挪 j--; } arr[j + 1] = key; // 插入到正确位置 // 打印当前轮次的排序状态 cout << "第 " << i << " 轮排序: "; for (int k = 0; k < n; k++) { cout << arr[k] << " "; } cout << endl; } } // 测试代码 int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr) / sizeof(arr[0]); cout << "原始数组: "; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; insertionSort(arr, n); // 调用排序函数 cout << "排序后数组: "; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; return 0; }
💡 野牛程员运行效果
运行后,能清楚看到排序的过程:
原始数组: 64 25 12 22 11 第 1 轮排序: 25 64 12 22 11 第 2 轮排序: 12 25 64 22 11 第 3 轮排序: 12 22 25 64 11 第 4 轮排序: 11 12 22 25 64 排序后数组: 11 12 22 25 64
🤔 野牛程序员谈插入排序的优势
✅ 简单易懂,适合少儿编程。
✅ 适合少量数据(几十个元素以内速度还不错)。
✅ 稳定排序(不会改变相同元素的相对顺序)。
但也有个小缺点: 🔴 对于大数据量来说,速度比较慢,因为它的时间复杂度是 O(n²)。如果数据量很大,可能要考虑更高级的算法,比如 快速排序、归并排序。
🎯 野牛程序员总结
插入排序 = 整理扑克牌!
让孩子学会插入排序,就能用计算机像整理书包、给玩具分类一样,让数据变得整整齐齐!
学会插入排序后,可以挑战:
🔥 冒泡排序(Bubble Sort)
🔥 选择排序(Selection Sort)
🔥 快速排序(Quick Sort)
关注我,跟着野牛程序员探索编程的世界,乐趣无穷! 🚀
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
