Сортировка — фундаментальная операция в информатике, которая играет решающую роль в различных приложениях. В этой статье блога мы рассмотрим различные методы сортировки в C++, сохраняя при этом исходные индексы элементов. Сохраняя индексную информацию, мы можем легко связать отсортированные элементы с их исходными позициями, что позволяет эффективно манипулировать данными и анализировать их.
-
Метод: использование пользовательской структуры данных
Пример кода:struct Element { int value; int index; }; bool compareElements(const Element& a, const Element& b) { return a.value < b.value; } void sortWithIndexTracking(vector<int>& data) { vector<Element> elements; for (int i = 0; i < data.size(); ++i) { elements.push_back({ data[i], i }); } sort(elements.begin(), elements.end(), compareElements); for (int i = 0; i < elements.size(); ++i) { data[i] = elements[i].value; } }
-
Метод: использование отдельного индексного массива
Пример кода:void sortWithIndexTracking(vector<int>& data) { int n = data.size(); vector<int> indexes(n); iota(indexes.begin(), indexes.end(), 0); sort(indexes.begin(), indexes.end(), [&](int a, int b) { return data[a] < data[b]; }); vector<int> sortedData(n); for (int i = 0; i < n; ++i) { sortedData[i] = data[indexes[i]]; } data = sortedData; }
-
Метод: использование парного массива
Пример кода:void sortWithIndexTracking(vector<int>& data) { int n = data.size(); vector<pair<int, int>> elements(n); for (int i = 0; i < n; ++i) { elements[i] = make_pair(data[i], i); } sort(elements.begin(), elements.end()); for (int i = 0; i < n; ++i) { data[i] = elements[i].first; } }
В этой статье мы рассмотрели три различных метода сортировки в C++ с сохранением исходных индексов. Используя пользовательские структуры данных, отдельные массивы индексов или пары, мы можем эффективно сортировать данные и сохранять необходимую индексную информацию для дальнейшего анализа. Выбор метода зависит от конкретных требований вашего приложения. Поэкспериментируйте с этими методами, чтобы оптимизировать алгоритмы сортировки и расширить возможности манипулирования данными.