Как изменить стандартный алгоритм сортировки, чтобы отслеживать индексы в массиве в отдельном массиве? - PullRequest
0 голосов
/ 10 марта 2020

Моя попытка довольно громоздка, и в основном это просто модификация другой функции сортировки

void heapify(vector<int> &v, vector<int> &indx, int n, int i) {
    int x{ i };
    int l{ 1 + (2 * i) };
    int r{ 2 + (2 * i) };

    if (n > l&& v[l] > v[x])
        x = l;
    if (n > r&& v[r] > v[x])
        x = r;
    if (x != i) {
        swap(v[i], v[x]);
        //keep track of indexes
        swap(indx[i], indx[x]);
        heapify(v, indx, n, x);
    }
}

void heapsort(vector<int> &v, vector<int> &indx, int n) {
    for (int i{ n / 2 - 1 }; i >= 0; --i)
        heapify(v, indx, n, i);
    for (int i{ n - 1 }; i >= 0; --i) {
        swap(v[0], v[i]);
        //keep track of indexes
        swap(indx[0], indx[i]);
        heapify(v, indx, i, 0);
    }
}

Итак, мой вопрос: как изменить стандартную функцию std :: sort () и сохранить все индексы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...