HJ14 字符串排序

我想了两种方法:

一、直接利用multiset容器

#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<stack>
#include<list>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

void test()
{
	int n = 0;
	cin >> n;
	string str = "";
	multiset<string>s;
	for (int i = 0; i < n; ++i)
	{
		cin >> str;
		s.insert(str);
	}
	cout << endl;
	for (multiset<string>::iterator it = s.begin(); it != s.end(); ++it)
	{
		cout << *it << endl;
	}
}
int main()
{

	test();
	system("pause");
	return 0;
}

二、利用了冒泡排序和vector容器,复杂度较高

#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<stack>
#include<list>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

void test()
{
	int n = 0;
	cin >> n;
	string str = "";
	vector<string>v;
	for (int i = 0; i < n; ++i)
	{
		cin >> str;
		v.push_back(str);
	}
	int pos = 0;
	for (int j = 0; j < v.size(); ++j)
	{
		for (int k = 0; k < v.size() - j - 1; ++k)
		{
			if (v[k][pos] > v[k + 1][pos])
			{
				string temp = v[k];
				v[k] = v[k + 1];
				v[k + 1] = temp;
			}
			while(v[k][pos] == v[k + 1][pos])
			{
				pos++;
				if (v[k][pos] > v[k + 1][pos])
				{
					string temp = v[k];
					v[k] = v[k + 1];
					v[k + 1] = temp;
				}
			}
			pos = 0;
		}
	}
	for (int l = 0; l < v.size(); ++l)
	{
		cout << v[l] << endl;
	}
	
}


int main()
{

	test();
	system("pause");
	return 0;
}

while循环的作用是当两个字符串的第一个字母一样时,就比较第二个,以此类推。

测试是通过的。

全部评论
这不直接sort吗
点赞 回复 分享
发布于 2023-06-15 11:59 陕西

相关推荐

不多说了,看图吧
MomonKa:实际上是,机房机器有些高度,问问你身高,有没有女朋友是看你能不能猛猛加班
你最讨厌面试问你什么?
点赞 评论 收藏
分享
牛客nb666号:看数据范围, -1e4~1e4, 用一个计数数组存一下, 再按个数让k减到0就行; 堆排不是O(n)的, 快速选择算法是O(n)但随机性较强
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务