前面讲了 STL 的 sort,但那毕竟是别人写好的。今天分享一个我自己写的排序函数——它会根据数组的实际情况,自动选择最合适的排序算法。我叫它 lxySort。
一、思路:没有最好的排序,只有最合适的
你可能听过各种排序:快排、归并、计数、基数、冒泡……每个都有自己的适用场景。那么问题来了:能不能写一个函数,自己判断"该用哪个"?
这就是 lxySort 干的事。它像个小管家,先看看这堆数据是什么情况,再决定派哪个"打手"上场。
前面讲了 STL 的 sort,但那毕竟是别人写好的。今天分享一个我自己写的排序函数——它会根据数组的实际情况,自动选择最合适的排序算法。我叫它 lxySort。
你可能听过各种排序:快排、归并、计数、基数、冒泡……每个都有自己的适用场景。那么问题来了:能不能写一个函数,自己判断"该用哪个"?
这就是 lxySort 干的事。它像个小管家,先看看这堆数据是什么情况,再决定派哪个"打手"上场。
很多人问:为什么自己搭一个博客?其实答案很简单——我想给坦克一个家,然后学着当一个"站主"。今天不讲大道理,就翻出我的 git 提交历史,按时间线把它讲一遍。这些 commit 就是我这个网站最真实的成长日记。
abf6541Initial commit(2024-03-23)
最初只是"Add files via upload"——一堆文件直接拖上来。网站的第一版,其实就是个坦克展示页,把我画的手绘坦克放上去,给它们一个存证。
画坦克有两条腿:侧面和俯视。初学者大多先画侧面(好上手),但画久了你会发现——俯视图才是展示坦克全貌的关键。这篇讲讲两个视角各自的画法和坑。
侧面图就是"从旁边看",主要画车体、炮塔、炮管的轮廓。
画法要点:
画好一辆坦克,最后一步也是最灵魂的一步——取名字。一辆车叫"小蓝",还是叫"核巨啸",气质完全不一样。名字起得好,坦克还没上场,气势就赢了。
起名之前,先回答几个问题:
刷题的时候,最烦的就是手写排序、查找、二分。其实 STL 早就给你备好了现成的,只要会用,能省一半时间。今天把最常用的三个记下来。
#include <algorithm>
#include <vector>
std::vector<int> v = {5, 2, 8, 1, 9};
std::sort(v.begin(), v.end()); // 从小到大
// 结果:1 2 5 8 9
// 从大到小
std::sort(v.begin(), v.end(), std::greater<int>());
// 自定义比较(按绝对值,或按结构体某个字段)
std::sort(v.begin(), v.end(), [](int a, int b) {
return abs(a) < abs(b);
});
很多新手学完 new,就开始疯狂手动管理数组内存——new、delete[]、算大小、防越界……结果 bug 一抓一大把。其实 C++ 早就给你准备好了 std::vector,方便又安全。
一句话:一个能自动管理内存、想多长就多长的动态数组。
#include <vector>
int main() {
std::vector<int> v; // 空 vector
v.push_back(10); // 往尾部加一个
v.push_back(20);
v.push_back(30); // 现在有 3 个元素
return 0;
}
学 C++ 的时候,指针和数组永远是绕不开的两兄弟。它们看起来长得一样,用起来却处处是坑。这篇文章把我踩过的三个坑记下来,希望能帮你少走点弯路。
很多人背口诀:数组名就是首地址。这句话不全对,它只在"作为函数参数"时成立。
#include <iostream>
void func(int arr[]) {
// 这里的 arr 已经退化成指针了
std::cout << sizeof(arr) << std::endl; // 8,是一个指针的大小
}
int main() {
int a[5] = {1, 2, 3, 4, 5};
std::cout << sizeof(a) << std::endl; // 20,整个数组的大小
func(a);
return 0;
}
很多人学完指针,又看到 &,直接懵了——这东西到底是地址,还是引用?别急,今天把这两个"长相有点像"的家伙彻底分清楚。
引用是变量的"别名",不是变量本身。
int a = 10;
int &b = a; // b 是 a 的别名
b = 20; // 改 b 就是改 a
std::cout << a << std::endl; // 输出 20
画坦克这事儿,看着难,其实有套路。只要抓住几个关键点,从"画得像坨铁盒子"到"一眼就知道是坦克",只差这几步。
很多人一上来就抠炮管上的铆钉,结果整体比例崩了。正确顺序是:
从一个圆的秘密说起。
任何圆的周长 ÷ 直径,算出来的结果都是同一个数,约等于 3.14159...,我们叫它 π(读作"派")。
周长 = π × 直径
面积 = π × 半径²