Простой ответ - скопировать массивы перед сортировкой и восстановить их, когда вы закончите.Делайте что-то более сложное, только если скорость является проблемой.
В C ++ вы можете отсортировать массив индексов, используя собственный компаратор для сравнения значений массива, что-то вроде этого (не проверено, и предполагается, что числа с плавающей точкойв векторе):
class Comparator
{
public:
explicit Comparator(const std::vector<float>& array) : array(array) {}
bool operator()(size_t a, size_t b) {return array[a] < array[b];}
private:
const std::vector<float>& array;
};
void Example(const std::vector<float> &floats)
{
std::vector<size_t> rank;
for (int i = 0; i < floats.size(); ++i) rank.push_back(i);
std::sort(rank.begin(), rank.end(), Comparator(floats));
std::cout << "First: " << floats[rank.front()] << std::endl;
std::cout << "Last: " << floats[rank.back()] << std::endl;
}
Или, за счет дополнительной памяти, вы можете построить вектор из пар (float, rank) и отсортировать его по значениям float.Этот подход также будет работать в C с использованием qsort()
.