7-2 英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#
作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
之前直接用sort写,发现第三个测试点会错误,之后查资料才知道“当指定范围内包含多个相等的元素时,sort() 排序函数无法保证不改变它们的相对位置。”也就是多个元素时不能保证稳定性
stable_sort() 和 sort() 具有相同的使用场景,就连语法格式也是相同的
前者在功能上除了可以实现排序,还可以保证不改变相等元素的相对位置。
#include<bits/stdc++.h>
using namespace std;
struct eng
{
string s;
int len;
}a[50];
bool cmp(eng x,eng y)
{
return x.len<y.len;
}
int main()
{
int i=0;
string c;
while(cin>>c)
{
if(c[0]=='#')
break;
a[i].s=c;
a[i].len=c.length();
i++;
}
stable_sort(a,a+i,cmp);
for(int j=0;j<i;j++)
{
cout<<a[j].s<<' ';
}
}