1. 程式人生 > 其它 >【pta】7-15 英文單詞排序 (25 分) <stable_sort用法>

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

一、題目大意

本題要求編寫程式,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。如果長度相同,按照輸入的順序不變。

輸入格式:

輸入為若干英文單詞,每行一個,以#作為輸入結束標誌。其中英文單詞總數不超過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