排序的概念与内/外排序
排序的概念与内/外排序
掌握排序算法的概念,了解内排序和外排序的概念及差别,理解排序算法的时间复杂度、空间复杂度、使用场景。
排序是把一组数据按关键字非减(或非增)重新排列。内排序在内存中完成,数据量可一次载入;外排序数据太大放不进内存,需分块读写在磁盘上,四级以了解概念为主。
GESP 四级还会问:某场景用哪种排序更合适、时间与空间代价的直观比较。120 分钟考试不要求证明复杂定理,但要能根据数据规模 n 判断「O(n²) 能否接受」—— n 很小时常可接受, n 很大则不行。
内排序是四级重点;外排序知道「内存放不下就要分块+I/O」即可,细节不作深挖要求。
最长连续段
C++时间 1 s内存 512 MB标准输入输出
对于 k 个整数构成的数组 [b1,b2,…,bk],如果对 1≤i<k 都有 bi+1=bi+1,那么称数组 b 是一个连续段。
给定由 n 个整数构成的数组 [a1,a2,…,an],你可以任意重排数组 a 中元素顺序。请问在重排顺序之后,a 所有是连续段的子数组中,最长的子数组长度是多少?
例如,对于数组 [1,0,2,4],可以将其重排为 [4,0,1,2],有以下 10 个子数组:
[4],[0],[1],[2],[4,0],[0,1],[1,2],[4,0,1],[0,1,2],[4,0,1,2]其中除 [4,0],[4,0,1],[4,0,1,2] 以外的子数组均是连续段,因此是连续段的子数组中,最长子数组长度为 3。
输入格式
第一行,一个正整数 n,表示数组长度。
第二行,n 个整数 a1,a2,…,an,表示数组中的整数。
输出格式
一行,一个整数,表示数组 a 重排顺序后,所有是连续段的子数组的最长长度。
样例
4 1 0 2 4
3
对于 40% 的测试点,保证 1≤n≤8。
9 9 9 8 2 4 4 3 5 3
4
数据范围
对于所有测试点,保证 1≤n≤105,−109≤ai≤109。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
优先购买
C++时间 1 s内存 512 MB标准输入输出
小 A 有 M 元预算。商店有 N 个商品,每个商品有商品名 S、价格 P 和优先级 V 三种属性,其中 V 为正整数,且 V 越小代表商品的优先级越高。
小 A 的购物策略为:
- 总是优先买优先级最高的东西;
- 如果有多个最高优先级商品,购买价格最低的;
- 如果有多个优先级最高且价格最低的商品,购买商品名字典序最小的。
小 A 想知道能购买哪些商品。
输入格式
第一行两个正整数 M,N,代表预算和商品数。
之后 N 行,每行一个商品,依次为 Si Pi Vi,代表第 i 个商品的商品名、价格、优先级。
数据保证不存在两个名字相同的商品。
输出格式
按照字典序从小到大的顺序,输出所有购买商品的商品名。
样例
20 4 apple 6 8 bus 15 1 cab 1 10 water 4 8
bus cab water
数据范围
对于所有测试点,保证 1≤∣Si∣≤10,1≤M,Pi≤105,1≤N≤103,1≤Vi≤10。商品名仅由小写字母组成且不存在两个相同的商品名。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
礼盒排序
C++时间 1 s内存 512 MB标准输入输出
商店推出了许多礼盒,每个礼盒中包含 k 件商品,每件商品都有一个价格。
现在需要对这些礼盒进行排序,排序规则如下:
- 先按礼盒总价格从小到大排序;
- 如果总价格相同,按礼盒中最贵商品的价格从小到大排序;
- 如果仍然相同,按礼盒中最便宜商品的价格从小到大排序;
- 如果仍然相同,按礼盒编号从小到大排序。
请输出排序后的礼盒编号。
输入格式
第一行包含两个整数 n 和 k,分别表示礼盒数量和每个礼盒中商品的数量。
接下来 n 行,每行包含 k 个整数,第 i 行表示第 i 个礼盒中各商品的价格。
输出格式
输出一行,包含排序后的礼盒编号(编号从 1 开始),用空格分隔。
样例
4 3 3 5 2 4 1 5 2 2 4 3 4 3
3 4 2 1
| 编号 | 商品价格 | 总价 | 最大值 | 最小值 |
|---|---|---|---|---|
| 1 | 3 5 2 | $10 $ | 5 | 2 |
| 2 | 4 1 5 | 10 | 5 | 1 |
| 3 | 2 2 4 | 8 | 4 | 2 |
| 4 | 3 4 3 | 10 | 4 | 3 |
排序过程:
- 按总价排序,3 号礼盒总价最小;
- 其余总价均为 10,再按最大值排序,4 号最大值更小;
- 1 号和 2 号最大值相同,再按最小值排序,2 号更小。
最终顺序为:3 4 2 1
数据范围
保证 1≤n≤103,1≤k≤10,1≤ 商品价格 ≤104。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB