高北-小学进阶-L1-函数&排序
2026-10-09 16:42:09
发布于:广东
今天关键词: 函数、返回值、参数、桶排序、sort 排序、cmp
小提醒:函数是把一段代码打包起来,起个名字,以后想用就喊它名字。排序是把一堆数据按大小排好队。
一、函数:把代码打包成一个小工具
1. 函数长什么样
返回值类型 函数名(参数) {
函数体;
}
大白话拆开看:
| 部分 | 意思 | 大白话 |
|---|---|---|
| 返回值类型 | 这个函数做完后,交回来什么类型的结果 | 像“交货类型” |
| 函数名 | 给这个工具起个名字 | 以后喊名字就能用它 |
| 参数 | 做这件事需要给它的材料 | 像“原料” |
| 函数体 | 里面写的具体步骤 | 像“做法” |
2. 返回值类型
| 类型 | 意思 | 例子 |
|---|---|---|
void |
没有返回值,做完就完了 | 只输出,不交结果 |
int |
返回一个整数 | 返回和、差、判断结果 |
double |
返回一个小数 | 返回平均值 |
bool |
返回真或假 | 返回判断结果 |
3. 参数
| 类型 | 意思 | 例子 |
|---|---|---|
| 无参函数 | 不需要给材料 | int f() |
| 有参函数 | 需要给材料 | int f(int x) |
| 多个参数 | 需要给多份材料 | int f(int a, int b) |
4. 例子:判断两位数
bool check(int x) {
return (x >= 10 && x <= 99);
}
大白话:
- 函数名:
check,检查的意思。 - 参数:
int x,给我一个整数。 - 返回值:
bool,返回真或假。 - 函数体:如果
x在 10 到 99 之间,返回true,否则返回false。
用法:
if (check(35)) {
cout << "是两位数";
}
二、排序:让数据排好队
1. 桶排序
桶排序就像准备一排桶,每个桶代表一个数字。数据来了,就放进对应的桶里,最后按桶的顺序倒出来。
关键点:
- 桶的大小由数据的范围决定,不是由数据个数决定。
- 比如数据范围是 0 到 100,就要准备 101 个桶。
- 桶标记:数据出现一次,就在对应桶里做个标记。
- 遍历桶:从起点到终点,把有标记的桶输出。
例子:
int tong[101] = {0}; // 准备 101 个桶,编号 0 到 100
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
tong[x]++; // 把 x 放进对应的桶,标记加 1
}
for (int i = 0; i <= 100; i++) {
for (int j = 1; j <= tong[i]; j++) {
cout << i << " ";
}
}
大白话:
- 准备 101 个空桶。
- 每读到一个数,就放进对应编号的桶里。
- 从 0 号桶到 100 号桶,依次看看里面有几个数,全部倒出来。
桶排序适合: 数据范围不大,比如分数 0 到 100。
桶排序不适合: 数据范围很大,比如 1 到 1000000000,桶太多放不下。
2. sort 排序
sort 是 C++ 自带的排序工具,又快又好用。
语法:
sort(数组名 + 起点, 数组名 + 终点 + 1, 排序规则函数);
注意:
- 默认是升序,从小到大。
- 想降序,要自己写
cmp函数。 - 终点要 +1,因为 sort 的区间是左闭右开。
升序例子:
int a[1005];
sort(a + 1, a + n + 1);
大白话:把 a[1] 到 a[n] 从小到大排好。
降序例子:
bool cmp(int qian, int hou) {
return qian > hou;
}
sort(a + 1, a + n + 1, cmp);
大白话:
cmp是“比较规则”。qian是前面的数,hou是后面的数。return qian > hou;意思是:前面的数比后面的数大,就排在前面。- 这样排出来就是从大到小。
注意:
cmp的参数类型要和数组类型一致。- 排
int数组,cmp就写int。 - 排结构体数组,
cmp就写结构体类型。
3. 结构体数组排序例子
struct Student {
int score;
int id;
};
bool cmp(Student qian, Student hou) {
return qian.score > hou.score; // 按分数从高到低
}
Student a[1005];
sort(a + 1, a + n + 1, cmp);
三、桶排序和 sort 排序对比
| 排序方法 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 桶排序 | 简单、快 | 数据范围大时桶太多 | 分数、年龄等范围小的数据 |
| sort 排序 | 通用、强大 | 需要会写 cmp | 大多数排序场景 |
四、完整小例子
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int qian, int hou) {
return qian > hou;
}
int main() {
int n;
cin >> n;
int a[1005];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1); // 升序
for (int i = 1; i <= n; i++) {
cout << a[i] << " ";
}
cout << "\n";
sort(a + 1, a + n + 1, cmp); // 降序
for (int i = 1; i <= n; i++) {
cout << a[i] << " ";
}
return 0;
}
五、容易错的地方
- 函数名后面要写
(),不能丢。 - 有返回值的函数,记得写
return。 void函数不用return值,但可以写return;直接结束。- 桶排序的桶大小由数据范围决定,不是数据个数。
- 桶排序遍历时,起点和终点要写对。
sort的终点要 +1。cmp的参数类型要和数组类型一致。sort要加#include <algorithm>。- 升序不用写
cmp,降序才要写。
六、记忆小口诀
函数打包小工具,
返回值、参数要看清;
桶排序,先备桶,
范围多大桶多大;
sort 排序真方便,
默认升序不用管;
想要降序写 cmp,
终点记得加个一。
七、课后小练习
- 写一个函数
check(int x),判断x是不是三位数。 - 写一个函数
max2(int a, int b),返回两个数中的较大值。 - 输入 n 个 0 到 100 的分数,用桶排序从大到小输出。
- 输入 n 个整数,用
sort升序输出。 - 输入 n 个整数,用
sort降序输出。 - 输入 n 个学生的分数,按分数从高到低排序输出。
今日一句话总结:
函数是把代码打包成小工具,有返回值、有参数;桶排序先备桶,桶的大小看数据范围;sort 排序默认升序,降序要写 cmp,终点记得加 1。
这里空空如也














有帮助,赞一个