📅  最后修改于: 2023-12-03 15:09:28.426000             🧑  作者: Mango
在对数组进行排序时,我们常常需要一个关键字来进行排序,比如数字大小、字符串字典序等等。而有些场合,我们需要对数组进行特殊的排序,如对以 K 为模产生 P 的数组元素排序。这时我们需要写一个函数来实现这个功能。
对于每个元素 arr[i],我们可以先求它对 K 取模的余数,然后将余数与元素值一起存入一个 pair 中,再将所有的 pair 存入一个数组中。最后对于这个数组进行排序,排序方式为按对 K 取模的余数从小到大排序。排序后,我们就可以得到一个按以 K 为模产生 P 的方式排列的数组了。
以下为该函数的代码实现,使用 C++ 编写。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> pii;
bool cmp(const pii& a, const pii& b) {
return a.first < b.first;
}
vector<int> sort_by_mode(int K, int P, vector<int>& arr) {
vector<pii> v(arr.size());
for (int i = 0; i < arr.size(); i++) {
v[i].first = arr[i] % K;
v[i].second = arr[i];
}
sort(v.begin(), v.end(), cmp);
vector<int> res;
for (int i = 0; i < arr.size(); i++) {
int num = v[i].second;
if (num % K == P) {
res.push_back(num);
}
}
return res;
}
int main() {
vector<int> arr = {3, 6, 9, 12, 15};
int K = 6, P = 0;
vector<int> res = sort_by_mode(K, P, arr);
cout << "Input array: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
cout << "Sorted array by mode " << K << ": ";
for (int num : res) {
cout << num << " ";
}
cout << endl;
return 0;
}
该函数的参数为三个:K、P 和 arr。K 和 P 都是整数,用于定义以 K 为模产生 P 的方式;arr 是一个整型数组,需要进行排序。函数返回一个整型数组,为按以 K 为模产生 P 的方式排列的 arr。
假设 arr = [3, 6, 9, 12, 15],K = 6,P = 0。我们调用函数 sort_by_mode(K, P, arr),可以得到按以 K 为模产生 P 的方式排列的 arr,即 [6, 12]。
此处给出一个具体执行该函数的程序截图: