Другие языки программирования и технологии

Не могу сообразить каким алгоритмом задать сортировку, подскажите, пожалуйста

нужно получить массив из индексов отсортированного массива какой наиболее кратчайший путь без кучи циклов :C компараторами почти не умею пользоваться :C в C++
Для сортировки необходимо и достаточно ровно 2 цикла (либо цикл и рекурсия, либо две рекурсии - т. к. рекурсия эквивалентна циклу). Меньше двух не получится, больше двух не имеет смысла.

Вариант 1: создаешь массив элементов типа struct {int value, index;}, сортируешь его по value (значения исходного массива) и после сортировки выводишь значения index (индексы исходного массива). В этом случае можешь использовать встроенные в C/C++ функции сортировки.

Вариант 2: создаешь отдельный массив индексов и при сортировке синхронно переставляешь элементы и в массиве значений, и в массиве индексов.

Вариант 3 (это уже хак): записываешь значение и индекс в виде одного целого числа более длинного типа, сортируешь получившийся массив и после этого извлекаешь из него индексы. Примерно так:

long tmp[len];
for(i = 0; i < len; ++i) {
cin >> val;
tmp[i] = (val << 16) | i);
}
// сортировка tmp;
for(i = 0; i < len; ++i) {
cout << (tmp[i] & 0xFFFF);
}
Anushervon Hotamov
Anushervon Hotamov
70 212
Лучший ответ
Александр Щучкин третий вариант очень интересный
Не понял. То есть тебе надо получить: 3 0 1 2
#include < iostream >
#include < windows.h >
#include < algorithm >

using namespace std;

void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");

unsigned n;
cout << "Введите длину массива ";
cin >> n;
auto a = new pair < unsigned, int > [n];
cout << "Введите элементы массива через пробел" << endl;
for (unsigned u = 0; u < n; ++u)
{
a[u].first = u;
cin >> a[u].second;
}
auto p = [](
pair < unsigned, int > t1,
pair < unsigned, int > t2
)
{
return t1.second < t2.second;
};
sort(a, a + n, p);
for (unsigned u = 0; u < n; ++u)
{
cout << a[u].first << " ";
}
cout << endl;
system("pause");
}
Александр Щучкин спасибо, надо собрать все операции которыми мне посоветовали воспользоваться и записать, совсем не встречал pair
на тостере спроси. там сразу ответят
Александр Щучкин оки, надо будет там зарегистрироваться