题解 | #字符串排序 归并 不使用库函数#
字符串排序
https://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
std::vector<string> res;
bool compare(const std::string& str1, const std::string& str2){
int len = min(str1.size(), str2.size());
// 小到大排序
for (int i = 0; i < len; ++i){
if (str1[i] < str2[i]) return true;
else if (str1[i] > str2[i]) return false;
}
if (str1.size() == len) return true;
return false;
}
bool compare_1(const std::string& str1, const std::string& str2){
int len = min(str1.size(), str2.size());
// 大到小排序
for (int i = 0; i < len; ++i){
if (str1[i] > str2[i]) return true;
else if (str1[i] < str2[i]) return false;
}
if (str1.size() == len) return false;
return true;
}
void merge_algorithm(std::vector<string>& vec, int start, int mid, int end){
// 将两段数组排序
res.clear();
int leftStart = start;
int rightStart = mid + 1;
int count = 0;
while (leftStart <= mid && rightStart <= end){
// 左右两端没有全部排序完 从小到大排序
if (compare(vec[leftStart], vec[rightStart])){
// std::cout << "vec[leftStart]: " << vec[leftStart] << std::endl;
res.push_back(vec[leftStart]);
leftStart++;
}else{
res.push_back(vec[rightStart]);
rightStart++;
}
}
// 左段数组先排完序
while (rightStart <= end){
res.push_back(vec[rightStart++]);
}
// 右段数组先排完
while (leftStart <= mid){
res.push_back(vec[leftStart++]);
}
// 处理原数组
for (int i = 0; i < res.size(); ++i){
// std::cout << "res" << res[i] << std::endl;
vec[i + start] = res[i];
// std::cout << "vec" << vec[i] << std::endl;
}
}
void merge_sort(std::vector<string>& str, int start, int end){
// 划分数组
if (start >= end) return;
int mid = start + (end - start)/2;
merge_sort(str, start, mid);
merge_sort(str, mid+1, end);
merge_algorithm(str, start, mid, end);
}
int main() {
int n;
std::cin >> n;
std::vector<string> result;
for (int i = 0; i < n; ++i){
string tmp;
std::cin >> tmp;
result.push_back(tmp);
}
// sort(result.begin(), result.end(), compare);
merge_sort(result, 0, result.size() - 1);
for (auto tmp : result){
std::cout << tmp << std::endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")

腾讯云智研发成长空间 5088人发布