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

Подскажите, как правильно написать сортировку на СИ++ (два вложенных цикла)...

Дано: список 10 рек:

1. Волга

2. Амур

3. Иртыш

....

Конкретные названия непринципиальны. Реки определяются порядковым номером.
Напишите программу на языке C++, которая принимает на
вход набор пар (river_id, river_length), т. е. номер реки в списке и длина. Результатом работы
программы должен быть список рек, расположенных в порядке возрастания длины с сохранением первоначального номера (идентификатора). Для каждой реки должен быть написан её номер и длина. Подсказка: может быть полезно завести несколько массивов. В частности,
целочисленный массив с номерами рек. А потом изменить порядок следования
номеров одновременно с тем, как вы располагаете длины в порядке возрастания.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct river {
unsigned id;
string name;
unsigned short length;
void console_write_line()const { cout << id << ". " << name << ", " << length << " км\n"; }
};
bool comp(river a, river b) { return a.length > b.length; }
int main() {
system("chcp 1251 > nul");
vector<river> rivers;
const vector<river>::size_type size = 10;
river temp;
for (vector<river>::size_type i = 0; i < size; ++i) {
temp.id = i + 1;
cout << "Река: ";
getline(cin, temp.name);
cout << "Длина: ";
cin >> temp.length;
cin.sync();
rivers.push_back(temp);
}
vector<river> query = rivers;
sort(query.begin(), query.end(), comp);
for (auto i : query) i.console_write_line();
cin.get();
}
Владимир Братинов
Владимир Братинов
50 643
Лучший ответ
Владимир Хохлов Очень изящно и красиво! Только ребенок изучает си++ всего 2 месяца, и таких сложных конструкций просто еще знает...
9класс, новая гимназия, спросить пока не у кого... Напишите, пожалуйста, совсем просто... #include
using namespace std;
void pechat_massiva(const int data[],int N)
{
for(int w = 0;w<N;++w)
{
cout«data[w]«" ";
}
cout«endl;
}
int main ()
{
int N = 8;
int id_rec[N];
cout«"Vvedite id rec:"«endl;
for(int i = 0;i<N;++i)
{
cin»id_rec[i];
}
cout«"Vvedite sootvedstvushie dlini rec:"«endl;
int dlina_rec[N];
for(int i = 0;i<N;++i)
{
cin»dlina_rec[i];
}
int sort_id[N],sort_dlina[N];
for(int s = 0;s-1;--i)
{
if(dlina_rec[i]<dlina_rec[i-1])
{
int x,y;
x = dlina_rec[i-1];
dlina_rec[i-1] = dlina_rec[i];
dlina_rec[i] = x;
y = id_rec[i-1];
id_rec[i-1]
Владимир Хохлов #include
using namespace std;
void pechat_massiva(const int data[],int N)
{
for(int w = 0;w<N;++w)
{
cout«data[w]«" ";
}
cout«endl;
}
int main ()
{
int N = 8;
int id_rec[N];
cout«"Vvedite id rec:"«endl;
for(int i = 0;i<N;++i)
{
cin»id_rec[i];
}
cout«"Vvedite sootvedstvushie dlini rec:"«endl;
int dlina_rec[N];
for(int i = 0;i<N;++i)
{
cin»dlina_rec[i];
}
int sort_id[N],sort_dlina[N];
for(int s = 0;s-1;--i)
{
if(dlina_rec[i]<dlina_rec[i-1])
{
int x,y;
x = dlina_rec[i-1];
dlina_rec[i-1] = dlina_rec[i];
dlina_rec[i] = x;
y = id_rec[i-1];
id_rec[i-1] = id_rec[i];
id_rec[i] = y;
}
}
sort_id[s] = id_rec[s];
sort_dlina[s] = dlina_rec[s];
—i;
}
pechat_massiva(sort_id,N);
pechat_massiva(sort_dlina,N);
system ("pause");
return 0;
}
Владимир Хохлов К сожалению, не работает. Красиво только вводятся массивы..., на вывод - не то... Может, парами вводить - id, length... Тогда как сортировать, имея в виду, что только length придется анализировать и сортировать...
Спасибо.
Простейшая сортировка "пузырьком".
Делается в 2-х циклах:
1) Просматриваем все элементы до ПРЕДпоследнего, назовем текущий S0
2) Просматриваем все элементы, от следующего за S0, до последнего, ищем минимальный, и меньше, чем S0
3) Если нашли, то меняем его с S0. Если НЕ нашли, то значит S0 стоит на своем месте.
Дополнительные массивы могут иметь смысл: толко при больших объемах. При объемах порядка десятков, не имеет.
Pavel Gerbst
Pavel Gerbst
48 987
Если пишешь на си++, то лучше использовать не несколько массивов, а класс.
1. Определи класс с двумя полями - число и строка.
2. Определи для него операторы сравнения.
3. Создай вектор по шаблону этого класса.
4. Добавляй в него новые экземпляры класса, создаваемые на основе ввода, пока ввод не будет закончен.
5. Воспользуйся методом сортировки стандартной библиотеки.
Timur ***
Timur ***
6 713