14276: 【原4276】小可怜要排序
题目
题目描述
author: 小可怜 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4276
小可怜要排序
Description
助教是个小可怜,因为她不知道要出什么机考题了。 然后她发现大家已经学完了指针和函数模板,欣喜若狂。 她用腻了STL库中的排序,想要手写排序玩一玩,所以她出了这道题,顺便让大家体会一下下学期数据结构不能用STL的机考氛围。 小可怜助教读入了一列东西,想让你写一个排序函数,完成她想要的排序: - 0 将一列整数从小到大排序; - 1 将一列整数从大到小排序; - 2 将一列字符串从小到大排序; - 3 将一列字符串从大到小排序。
小可怜助教已经在给定的sample.cpp
里写好了四个操作所需要的比较函数。
要求如下:
- 只允许写一个排序函数sort
。
- 禁止修改或重写sample.cpp
中已经给定的部分,包括读入、函数调用、输出,请根据所给出的函数调用写代码,已给代码保证所有的读入、输出部分不会导致错误、超时等问题。
- 禁止使用任何C++自带的可用于排序的函数。禁止使用除代码中给定的库以外的库(如要使用请务必提前询问助教)。
- 给定sample.cpp
中开的数组大小保证够用。整数序列排序的最大数据范围为$1 \leq n \leq 10^5$,字符串序列的最大数据范围为$1 \leq n \leq 10^3$。
- 保证按要求调用比较函数不会发生答案错误!字符串的比较方式详见给定的比较函数。
- 不限制使用的排序算法,但请记住时间限制为1s,我们允许你使用复杂度较高的算法以获得部分分。
- 请使用指向函数的指针和函数模板完成代码。
- 你只有一次提交本题的机会!!!
- 请严格按照以上要求完成此题。我们会检查你提交的代码。虽然有其他的实现方式,但如果你未按照要求写代码,我们不会给你对应的分数。
- 同时,此题需要你注意提交代码的代码风格!!!极为糟糕的代码风格(例如改变语法的某些宏定义)会酌情扣分!!!
Input Format
第一行一个整数$op$,表示小可怜助教想要的操作数。 第二行一个整数$n$,表示一列数字/字符串的个数。 第三行$n$个数字/字符串。
Output Format
一行表示排完序的数列/字符串列。
SAMPLE INPUT 1
0
5
1 5 3 4 2
SAMPLE OUTPUT 1
1 2 3 4 5
SAMPLE INPUT 2
3
5
aaa bbb ccc ddd eee
SAMPLE OUTPUT 2
eee ddd ccc bbb aaa
Hint
sample.cpp
如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
int n = 0;
int a[1000005] = {0};
string str[1005];
//TODO
//sort
bool IncreaseInt(int x,int y) { return x < y; }
bool DecreaseInt(int x,int y) { return y < x; }
bool IncreaseString(string x, string y) { return x < y; }
bool DecreaseString(string x, string y) { return y < x; }
int main()
{
//主程序中仅此处允许添加必要的代码。其余部分不可修改。
int op;
char chh[100];
scanf("%d",&op);
switch (op)
{
case 0:
scanf("%d",&n);
for (int i=0;i<n;++i) scanf("%d",&a[i]);
sort(a,0,n-1,IncreaseInt);
for (int i=0;i<n;++i) printf("%d ",a[i]);
break;
case 1:
scanf("%d",&n);
for (int i=0;i<n;++i) scanf("%d",&a[i]);
sort(a,0,n-1,DecreaseInt);
for (int i=0;i<n;++i) printf("%d ",a[i]);
break;
case 2:
scanf("%d",&n); cin.getline(chh,90);
for (int i=0;i<n;++i) cin >> str[i];
sort(str,0,n-1,IncreaseString);
for (int i=0;i<n;++i) cout << str[i] << " ";
break;
case 3:
scanf("%d",&n); cin.getline(chh,90);
for (int i=0;i<n;++i) cin >> str[i];
sort(str,0,n-1,DecreaseString);
for (int i=0;i<n;++i) cout << str[i] << " ";
break;
}
return 0;
}
请大家仔细阅读以上给定的sample.cpp
,相信大家只要认真听课,就一定能写出来( ̄︶ ̄)
Oops! 本题目还没有解答!
助教老师们编题的速度,已经超过了解题的速度!
OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。
如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!