一定時間で動作するためstd::vector::swap
、一連のスワップ(クイックソートなど)を介して動作する並べ替えアルゴリズムを使用して、次の項目intVec
で同じスワップを同時に実行しながら並べ替えることができmatrix
ます。
#include <iostream>
#include <vector>
#include <algorithm>
// Sorts intVec in [low, high) while also performing identical swaps on matrix.
void iqsort(std::vector<int> &intVec, std::vector<std::vector<double>> &matrix,
int low, int high) {
if (low >= high) return;
int pivot = intVec[low];
int nLow = low + 1;
int nHigh = high - 1;
while (nLow <= nHigh) {
if (intVec[nLow] <= pivot) {
++nLow;
} else {
std::swap(intVec[nLow], intVec[nHigh]);
std::swap(matrix[nLow], matrix[nHigh]);
--nHigh;
}
}
std::swap(intVec[low], intVec[nHigh]);
std::swap(matrix[low], matrix[nHigh]);
iqsort(intVec, matrix, low, nHigh);
iqsort(intVec, matrix, nLow, high);
}
int main() {
std::vector<int> intVec = {10, 1, 5};
std::vector<std::vector<double>> matrix = {{33.0}, {11.0}, {44.0}};
iqsort(intVec, matrix, 0, intVec.size());
// intVec is {1, 5, 10} and matrix is {{11.0}, {44.0}, {33.0}}
}