一、题目大意
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#
作为输入结束标志。其中英文单词总数不超过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; }
当时百思不得其解, 然后去百度了,加了几个字符就过了 - -
三、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; }
换了stable_sort就过了
四、亿些知识点
<sort>和<stable_sort>的区别
https://blog.csdn.net/earbao/article/details/54911878
参考了这篇文章,sort基于快排,stable_sort基于归并(比快排还快一些)
stable_sort可以规避sort的不稳定性
因为在相同字符串的排序中sort可能会打乱顺序(比如这道题),在强一些的数据中可以体现
所以快来用stable_sort!(bushi