#include <iostream> #include <cstdlib> #include <ctime> using namespace std; void frequency(int arr[], int n, int freq[]) { if(n == 0) return; freq[arr[n-1]]++; frequency(arr, n-1, freq); } int main() { const int ARRAY_SIZE = 100; int arr[ARRAY_SIZE]; srand(time(NULL)); for(int i = 0; i < ARRAY_SIZE; i++) { arr[i] = rand() % 100; cout << arr[i] << " "; } int n = sizeof(arr)/sizeof(arr[0]); int freq[n]; for(int i=0; i<n; i++) freq[i] = 0; frequency(arr, n, freq); cout<<endl; for(int i=0; i<n; i++) if(freq[i]!=0) cout << i << " occurs " << freq[i] << " times." << endl; return 0; },最后以times从大到小为优先,I从小到大为次优先进行排序
时间: 2023-12-03 21:42:54 浏览: 73
以下是代码的修改,实现了按照题目要求对出现次数进行排序:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;
void frequency(int arr[], int n, int freq[]) {
if(n == 0)
return;
freq[arr[n-1]]++;
frequency(arr, n-1, freq);
}
bool cmp(pair<int, int>& a, pair<int, int>& b){
if(a.second != b.second)
return a.second > b.second;
else
return a.first < b.first;
}
int main() {
const int ARRAY_SIZE = 100;
int arr[ARRAY_SIZE];
srand(time(NULL));
for(int i = 0; i < ARRAY_SIZE; i++) {
arr[i] = rand() % 100;
cout << arr[i] << " ";
}
int n = sizeof(arr)/sizeof(arr[0]);
int freq[n];
for(int i=0; i<n; i++)
freq[i] = 0;
frequency(arr, n, freq);
cout<<endl;
vector<pair<int, int>> vec;
for(int i=0; i<n; i++)
if(freq[i]!=0)
vec.push_back({i, freq[i]});
sort(vec.begin(), vec.end(), cmp);
for(auto& p: vec)
cout << p.first << " occurs " << p.second << " times." << endl;
return 0;
}
```
其中,我们使用了 STL 中的 `vector` 和 `pair` 类型,以便更加方便地对出现次数进行排序。首先,我们将所有出现次数不为零的元素存入一个 `vector<pair<int, int>>` 中,其中 `pair` 的第一个元素存储数字,第二个元素存储出现次数,然后使用 `sort` 函数对 `pair` 进行排序,排序规则为:首先按照出现次数从大到小排序,如果出现次数相同,则按数字从小到大排序。最后,我们遍历排好序的 `vector`,输出每个数字的出现次数即可。
阅读全文