
Другие языки программирования и технологии
Не могу сообразить каким алгоритмом задать сортировку, подскажите, пожалуйста
нужно получить массив из индексов отсортированного массива какой наиболее кратчайший путь без кучи циклов :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);
}
Вариант 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);
}
Александр Щучкин
спасибо
Александр Щучкин
третий вариант очень интересный
Не понял. То есть тебе надо получить: 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");
}

#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
на тостере спроси. там сразу ответят
Александр Щучкин
оки, надо будет там зарегистрироваться
Похожие вопросы
- Проблема с алгоритмом быстрой сортировкой С++
- Мне задали сделать задачу по Turbo Pascal, но я забыл что нужно писать в var и READ. подскажите пожалуйста.
- подскажите, пожалуйста, как в досе задать такую команду: перейти в каталог RABOTA текущего каталога?
- Подскажите, пожалуйста, как сделать такую же обработку фото?
- Подскажите пожалуйста, как правильно оформить рекламную листовку?
- Подскажите пожалуйста какой язык програмирования лучше всего начать изучать в самом начале и начинающему програмисту?
- Прилипла реклама на сайт. Как её найти и удалить. В какой файл её могли воткнуть? Подскажите пожалуйста.
- Здравствуйте, подскажите пожалуйста могу я сразу 2 антивируса установить касперского и Нод32 спасибобо
- Подскажите, пожалуйста (С#)
- Подскажите пожалуйста, как сделать разметку для брошюры в Фотошоп?