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

Одномерные массивы. Пузырьковая сортировка. С++

Упорядочить нечетные элементы по возрастанию. Четные элементы должны остаться на своих местах.
Юрий Чижаков
Юрий Чижаков
1 148
bool noSwap;

for (int i = N - 1; i >= 0; i--)
{
noSwap = 1;
for (int j = 0; j < i; j++)
{
if (mass[j] > mass[j + 1])
{
tmp = mass[j];
mass[j] = mass[j + 1];
mass[j + 1] = tmp;
noSwap = 0;
}
}
if (noSwap == 1)
break;
}

где N – число элементов в массиве, а mass[] – массив элементов.
AF
Andrey From The Game
62 468
Лучший ответ
Юрий Чижаков Тут меняются все числа, а мне нужно только нечетные.
#include <iostream>
#include <vector>
#include <ctime>

int main() {
const size_t n = 20;
std::vector<int> v(n);
srand((unsigned)time(nullptr));

for (int& item : v) { // Заполнение
item = rand() % 101;
std::cout << item << ' ';
}

std::cout << '\n';
std::vector<int> indexes;

for (int i = 0; i < n; i++)
if (v[i] % 2)
indexes.push_back(i);

const int odds = (int)indexes.size();

for (int i = 0; i < odds - 1; i++) { // Сортировка
bool swapped = false;
for (int j = 0; j < odds - 1 - i; j++) {
int& first = v[indexes[j]];
int& second = v[indexes[j + 1]];
if (first % 2 && second % 2 && first > second) {
std::swap(first, second);
swapped = true;
}
}
if (!swapped)
break;
}

for (int item : v) // Вывод
std::cout << item << ' ';

return 0;
}