Skip to content

1065: 小恶魔要排序

题目

题目描述

助教是个小恶魔,因为她不知道要出什么机考题了。 然后她发现大家已经学完了指针和函数模板,欣喜若狂。 她用腻了STL库中的排序,想要手写排序玩一玩,所以她出了这道题,顺便让大家体会一下下学期数据结构不能用STL的机考氛围。 小恶魔助教读入了一列东西,想让你写一个排序函数,完成她想要的排序:

  • 0 将一列整数从小到大排序;
  • 1 将一列整数从大到小排序;
  • 2 将一列字符串从小到大排序;
  • 3 将一列字符串从大到小排序。

小恶魔助教已经在给定的sample.cpp里写好了四个操作所需要的比较函数。

要求如下: - 只允许写一个排序函数sort。 - 禁止修改或重写sample.cpp中已经给定的部分,包括读入、函数调用、输出,请根据所给出的函数调用写代码,已给代码保证所有的读入、输出部分不会导致错误、超时等问题。 - 禁止使用任何C++自带的可用于排序的函数。禁止使用除代码中给定的库以外的库。 - 保证按要求调用比较函数不会发生答案错误!字符串的比较方式详见给定的比较函数。 - 不限制使用的排序算法。$ n^2 $ 算法也是可以通过本题的。 - 请使用指向函数的指针函数模板完成代码。

输入格式

第一行一个整数$op$,表示小恶魔助教想要的操作数。 第二行一个整数$n$,表示一列数字/字符串的个数。 第三行$n$个数字/字符串。

输出格式

一行表示排完序的数列/字符串列。

样例输入

SAMPLE INPUT 1

text 0 5 1 5 3 4 2

SAMPLE INPUT 2

text 3 5 aaa bbb ccc ddd eee

样例输出

SAMPLE OUTPUT 1

text 1 2 3 4 5

SAMPLE OUTPUT 2

text eee ddd ccc bbb aaa

数据范围

$n \leq 100$, 保证所有数字为int范围内正整数。不限制使用的排序算法。$ n^2 $ 算法也是可以通过本题的。 给定的sample.cpp如下,请以此为基础完成你的程序: sample.cpp如下:

```cpp

include

include

include

include

include

include

using namespace std;

int n = 0; int a[10005] = {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> 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> str[i]; sort(str,0,n-1,DecreaseString); for (int i=0;i<n;++i) cout << str[i] << " "; break; } return 0; } ```

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!