题解 | 字符串排序
字符串排序
https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
//简单冒泡排序
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
string s;
vector<string>vec;
while (n--) {
cin >> s;
vec.push_back(s);
}
for (int i = 0; i < vec.size(); i++) {
for (int j = 1; j <vec.size()-i; j++) {//-i去除冗余
if (vec[j-1] > vec[j]) {
string tmp = vec[j-1];
vec[j-1] = vec[j];
vec[j] = tmp;
}
}
}
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<endl;
}
}
// 64 位输出请用 printf("%lld")
//库函数sort排序
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
string s;
vector<string>vec;
while (n--) {
cin >> s;
vec.push_back(s);
}
sort(vec.begin(),vec.end());
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<endl;
}
}
// 64 位输出请用 printf("%lld")
//堆排序
#include <functional>
#include <iostream>
#include<bits/stdc++.h>
#include <queue>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
string s;
priority_queue<string,vector<string>,greater<string>>que;
//元素类型、底层容器、排序方式,默认less<>是最大堆,改成greater<>是最小堆
while (n--) {
cin >> s;
que.push(s);
}
while(!que.empty()){
cout<<que.top()<<endl;;
que.pop();
}
}
// 64 位输出请用 printf("%lld")
//利用集合性质
#include <functional>
#include <iostream>
#include<bits/stdc++.h>
#include <queue>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
string s;
multiset<string>sets;
// 有序合集
while (n--) {
cin >> s;
sets.insert(s);
}
for(auto iter=sets.begin();iter!=sets.end();iter++){
cout<<*iter<<endl;
}
// multiset 的迭代器(iterator)类似于指针,它指向容器中的元素。当你使用 iter 遍历 multiset 时,iter 本身并不是元素本身,而是一个指向元素的迭代器对象。因此,要访问迭代器指向的实际值,需要通过解引用(*iter)来获取。
归并排序还没学会
查看22道真题和解析