1 条题解
-
0
归并排序:
#include <bits/stdc++.h> using namespace std; // 归并排序的合并函数 void merge(vector<string>& arr, int left, int mid, int right) { int n1 = mid - left + 1; // 左半部分的大小 int n2 = right - mid; // 右半部分的大小 vector<string> leftArr(n1), rightArr(n2); // 将数据拷贝到临时数组 for (int i = 0; i < n1; i++) { leftArr[i] = arr[left + i]; } for (int i = 0; i < n2; i++) { rightArr[i] = arr[mid + 1 + i]; } // 合并两个临时数组 int i = 0, j = 0, k = left; while (i < n1 && j < n2) { if (leftArr[i] < rightArr[j]) { arr[k++] = leftArr[i++]; } else { arr[k++] = rightArr[j++]; } } // 拷贝剩余的元素 while (i < n1) { arr[k++] = leftArr[i++]; } while (j < n2) { arr[k++] = rightArr[j++]; } } // 归并排序的递归函数 void mergeSort(vector<string>& arr, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; // 计算中间位置 // 递归排序左右两部分 mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); // 合并两个已排序的部分 merge(arr, left, mid, right); } } int main() { string input; getline(cin, input); // 读取整行输入 set<string> uniqueWords; // 使用 set 去重 stringstream ss(input); string word; while (ss >> word) { uniqueWords.insert(word); // 将单词加入 set 中,自动去重 } // 将去重后的单词存入 vector vector<string> words(uniqueWords.begin(), uniqueWords.end()); // 对去重后的单词进行归并排序 mergeSort(words, 0, words.size() - 1); // 输出排序后的单词 for (const string& w : words) { cout << w << endl; } return 0; }
- 1
信息
- ID
- 1130
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 11
- 已通过
- 6
- 上传者