实现函数sort #include<iostream> using namespace std; #define MaxSize 20 typedef char KeyType; typedef struct { //字母 KeyType character; //字频 int count; } RedType; void merge(RedType SR[], RedType TR[], int i, int m, int n) { } void Sort(RedType SR[], RedType TR1[], int s, int t) { } int main() { //统计结果,已经按字母序排好序 RedType SR[MaxSize]; //按照字频排序后的结果 RedType TR1[MaxSize]; string data; int i = 0; //读取输入 while (i < MaxSize && cin >> data) { SR[i].character = data[0]; SR[i++].count = stoi(data.substr(1, data.length())); if (cin.get() == '\n') { break; } } //排序 Sort(SR, TR1, 0, i - 1); //打印排序后的结果 for (int j = 0; j < i; ++j) { cout << TR1[j].character << TR1[j].count << " "; } }
时间: 2024-02-10 16:15:16 浏览: 118
下面是使用归并排序对 RedType 数组按照字频进行排序的 C++ 代码实现:
```cpp
#include<iostream>
using namespace std;
#define MaxSize 20
typedef char KeyType;
typedef struct {
//字母
KeyType character;
//字频
int count;
} RedType;
//归并排序合并两个有序序列
void merge(RedType SR[], RedType TR[], int i, int m, int n) {
int j = m + 1;
int k = i;
while (i <= m && j <= n) {
if (SR[i].count <= SR[j].count) {
TR[k++] = SR[i++];
} else {
TR[k++] = SR[j++];
}
}
while (i <= m) {
TR[k++] = SR[i++];
}
while (j <= n) {
TR[k++] = SR[j++];
}
}
//归并排序
void Sort(RedType SR[], RedType TR1[], int s, int t) {
if (s == t) {
TR1[s] = SR[s];
} else {
int m = (s + t) / 2;
RedType TR2[MaxSize];
Sort(SR, TR2, s, m);
Sort(SR, TR2, m + 1, t);
merge(TR2, TR1, s, m, t);
}
}
int main() {
//统计结果,已经按字母序排好序
RedType SR[MaxSize];
//按照字频排序后的结果
RedType TR1[MaxSize];
string data;
int i = 0;
//读取输入
while (i < MaxSize && cin >> data) {
SR[i].character = data[0];
SR[i++].count = stoi(data.substr(1, data.length()));
if (cin.get() == '\n') {
break;
}
}
//排序
Sort(SR, TR1, 0, i - 1);
//打印排序后的结果
for (int j = 0; j < i; ++j) {
cout << TR1[j].character << TR1[j].count << " ";
}
return 0;
}
```
在主函数中,先读取输入的统计结果,然后调用`Sort`函数进行排序,最后输出排序后的结果。`Sort`函数使用归并排序算法进行排序,先将原始序列分成两个子序列,分别对两个子序列进行排序,最后将两个有序子序列合并成一个有序序列。`merge`函数用于合并两个有序序列,具体实现过程中,先将原始序列复制到临时数组中,然后分别从两个子序列中取出较小的元素放入目标序列中,直到有一个子序列为空,最后将剩余的元素依次放入目标序列中。
阅读全文