【pta】7-15 英文单词排序 (25 分)

一、题目大意

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:

输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple
#
  结尾无空行

输出样例:

red blue green yellow purple 
  结尾无空行  

二、wa代码

#include "bits/stdc++.h"
using namespace std;

bool cmp(const string &a,const string &b)
{
    if (a.size()!=b.size()) return a.size()<b.size();
}
int main(void)
{
    string n;
    vector<string>vec;
    while (true)
    {
        cin>>n;
        if (n=="#") break;
        vec.push_back(n);
    }
    sort(vec.begin(), vec.end(),cmp);
    for (auto it:vec)
    {
        cout<<it<<" ";
    }
    return 0;
}

 

【pta】7-15 英文单词排序 (25 分) <stable_sort用法>

 

 

当时百思不得其解, 然后去百度了,加了几个字符就过了 - -

三、ac代码

#include "bits/stdc++.h"
using namespace std;

bool cmp(const string &a,const string &b)
{
    return a.size()<b.size();
}
int main(void)
{
    string n;
    vector<string>vec;
    while (true)
    {
        cin>>n;
        if (n=="#") break;
        vec.push_back(n);
    }
    stable_sort(vec.begin(), vec.end(),cmp);
    for (auto it:vec)
    {
        cout<<it<<" ";
    }
    return 0;
}

 

 

【pta】7-15 英文单词排序 (25 分) <stable_sort用法>

 

换了stable_sort就过了

四、亿些知识点

<sort>和<stable_sort>的区别

https://blog.csdn.net/earbao/article/details/54911878

参考了这篇文章,sort基于快排,stable_sort基于归并(比快排还快一些)

stable_sort可以规避sort的不稳定性

因为在相同字符串的排序中sort可能会打乱顺序(比如这道题),在强一些的数据中可以体现

所以快来用stable_sort!(bushi

上一篇:《关于sort这个狗东西,它死了……》(要用stable_sort)


下一篇:Docker 入门