题目描述
现在有int、string、float,3种类型的数据需要排序
每次输入数据类型及n个数据,并指定排序区间[beg, end),请你对该区间内的数据进行排序并输出
(可以使用系统排序函数)
输入
第1行:一个正整数t,表示测试次数
以下t行,每行输入:type n [beg,end) : n个数据(用空格分隔)..
(注意beg和end可以为任何值,且不一定有beg<=end成立。如果区间越界,则超出部分不进行排序:
比如n=10, 输入区间为[-10,5),则只对合法区间[0,5)排序)
输出
参见样例输出。浮点数要求1位小数。
1: 本来是把输出也放到排序里的,但一直PA;
后台样例有0.0,所以要对数据格式加以控制;
在float中,利用cout<<fixed<<setprecision(1)<<num;
控制一位小数输出;
2: num1<0 和 num2>num 时,可以直接改为起始和末尾值;
其余当num2>num1直接,拒绝排序就好了(*¯︶¯*)
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
template<typename T>
void ssort(T *a, int num1, int num2,int num)
{
if (num1 < 0) num1 = 0;
if (num2 > num) num2 = num;
if (num2 > num1)
{
sort(a+num1, a+num2);
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
string a;
int num;
cin >> a >> num;
if (a == "int")
{
int* p = new int[num];
char a, b, c, d;
int num1, num2;
cin >> a >> num1 >> b >> num2 >> c >> d;
for (int i = 0; i < num; i++)
{
cin >> p[i];
}
ssort(p, num1, num2,num);
cout << "[";
for (int i = 0; i < num; i++)
{
cout << p[i];
if (i != num - 1) cout << ", ";
}
cout << "]" << endl;
}
if (a == "float")
{
float* p = new float[num];
char a, b, c, d;
int num1, num2;
cin >> a >> num1 >> b >> num2 >> c >> d;
for (int i = 0; i < num; i++)
{
cin >> p[i];
}
ssort(p, num1, num2, num);
cout << "[";
for (int i = 0; i < num; i++)
{
cout <<fixed << setprecision(1) <<p[i];//控制格式
if (i != num - 1) cout << ", ";
}
cout << "]" << endl;
}
if (a == "string")
{
string* p = new string[num];
char a, b, c, d;
int num1, num2;
cin >> a >> num1 >> b >> num2 >> c >> d;
for (int i = 0; i < num; i++)
{
cin >> p[i];
}
ssort(p, num1, num2, num);
cout << "[";
for (int i = 0; i < num; i++)
{
cout << p[i];
if (i != num - 1) cout << ", ";
}
cout << "]" << endl;
}
}
return 0;
}