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循环的作用是当两个字符串的第一个字母一样时,就比较第二个,以此类推。
测试是通过的。