排序考试
描述
处于某种原因,一点都不懂编程的某某系小迅老师竟然成功跳槽到计算机系来教大一新生如何编程。
看着这位在台上胡言乱语,水平比同学小华弱太多的老师,小鲁简直不忍直视。
那学期的期中考试,小讯老师出的题目竟然是:“请写一个排序算法给数组排序,结果按照升序输出。”
经过NQ49斩的小鲁分分钟就完成了代码。小讯老师一看,哎呀不得了,得提高期中考试难度。
他立刻把题目改为:“给定任意T组整数,每组整数都要按升序输出。”
小鲁笑了笑,原来这类题已经难不倒他了,原来他早就超过了大一上小讯老师的水平了!
小鲁水平进阶了,你做得到吗?
输入
第一行是整数T,表示一共有T组数据。
接下来T行,每行有N+1个数,第一个整数表示该行有N个待排序的数字。
整数N(1<=N<=1000000),T(1<=T<=100)。
输出
对于每组整数,按照升序输出排序结果,每个结果占一行。
输入样例 1
3 4 412 120 5560 3760 5 576 66 35 99 88 4 127 100 510 380
输出样例 1
120 412 3760 5560 35 66 88 99 576 100 127 380 510
示例代码:
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int main(){
int T;
cin>>T; // 输入测试数据的组数
while(T--){
int n ,i ,a ;
cin>>n; // 输入当前组数据的长度n
vector<int>nums; // 创建一个整型向量nums用于存储当前组数据
for(i=0;i< n ; i++){
cin>>a; // 输入当前组数据的元素
nums.push_back(a); // 将元素加入向量nums中
}
sort(nums.begin(),nums.end()); // 对向量nums进行排序
for(i=0;i<n-1;i++)
cout<<nums[i]<<" "; // 输出排序后的元素(最后一个元素后面不输出空格)
cout<<nums[i]<<endl; // 输出最后一个元素并换行
}
return 0;
}
思路:
在main函数中,首先输入测试数据的组数T。然后,使用一个循环来读取和处理每组数据。循环会执行T次,每次读取一组数据并进行排序后输出。在循环内部,首先输入当前组数据的长度n。然后,创建一个整型向量nums用于存储当前组数据。接下来,使用一个循环来输入当前组数据的元素,并将元素加入向量nums中。之后,使用sort函数对向量nums进行排序。接着,使用一个循环来输出排序后的元素,最后一个元素后面不输出空格。最后,通过cout输出最后一个元素并换行。
在所有组数据处理完成后,返回0表示程序执行完成。这段代码的时间复杂度取决于排序操作,为O(nlogn),其中n为当前组数据的长度。由于需要处理多组数据,总的时间复杂度可以认为是O(T * nlogn),其中T为测试数据的组数。