各个班的同学绩点都已排好序,如何把所有班的同学都排好序呢,要求算法复杂度为O(n)

假设某大学某专业共有N(<=1000)位同学,分为k个班。根据课程计算出了每个同学的绩点,学生信息包括学号 姓名 性别 专业 班级 绩点。所有学生学号连续,同一个班的学号也连续,假设用顺序表存储这些信息。
假设每个班的同学都已按绩点排好顺序(升序),设计一个算法把该专业所有同学按绩点进行升序排序,要求算法复杂度为O(n).
(该用哪种算法呢?QAQ)

在最理想的情况下才可能是O(n)
https://img-blog.csdnimg.cn/img_convert/28b7c74c1374be277a125851dfae7d0d.png
这儿有所有排序算法的详解
https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

1.比较所有班第一个学生,找到最小的,将其排到新数组中
2.去掉那个学生,比较剩下的
重复以上过程

一共有k个班
那么把所有学生放到一个k*1000的二维数组a里,用一维数组b记录好每个班的学生数量,一维数组c记录每个班剩余学生的位置,初始都是0
另外定义一个长度1000的数组d用来放排序好的学生学号,再定义一个int e记录当前排序完成的学生,初始0
然后开始循环
每次从k个班各取一个成绩最低的人,放到d[e++]
同时对应的c[m]++
一直到e==全部人为止

可以类比归并排序归并的过程,将局部升序序列归并成总体升序。