Сортируем массив с++

KaTz1

Король флуда
Дней с нами
2.707
Розыгрыши
0
Сообщения
601
Репутация
11
Реакции
373
Задание
В массиве А(n) отсортировать элементы массива, стоящие на нечетных местах, в порядке возрастания

Хочу отсортировать методом вставки
Налепил
int temp = 0;
for (int i = 0; i < n; i++)
{
int j = i;

while ((j%2==1) && a[j - 2] > a[j] && j > 0)
{
temp = a[j - 2];
a[j - 2] = a[j];
a[j] = temp;
j-=2;
}
}
И он даже работает, но меня смущает, что при i=1 значение индекса a[j-2] уйдёт в -1. Это же плохо? Как это можно исправить?
 
условие поставь if
 
условие поставь if
int temp = 0;
for (int i = 1; i < n; i++)
{
for (int j = i; j >= 3; j-=2)
{
if ((j% 2 == 1) && a[j - 2] > a[j])
{
temp = a[j];
a[j] = a[j - 2];
a[j - 2] = temp;
}​
}​
}

Так получается? Начинаем с 3 (работаем только с нечёт), делаем два шага назад и в минус никогда не уйдём?
 
  • Like
Реакции: dasik
int temp = 0;
for (int i = 1; i < n; i++)
{
for (int j = i; j >= 3; j-=2)
{
if ((j% 2 == 1) && a[j - 2] > a[j])
{
temp = a[j];
a[j] = a[j - 2];
a[j - 2] = temp;
}​
}​
}

Так получается? Начинаем с 3 (работаем только с нечёт), делаем два шага назад и в минус никогда не уйдём?
проверь) если все верно сделал, то да)
 
  • Like
Реакции: KaTz1
int temp = 0;
for (int i = 1; i < n; i++)
{
for (int j = i; j >= 3; j-=2)
{
if ((j% 2 == 1) && a[j - 2] > a[j])
{
temp = a[j];
a[j] = a[j - 2];
a[j - 2] = temp;
}​
}​
}

Так получается? Начинаем с 3 (работаем только с нечёт), делаем два шага назад и в минус никогда не уйдём?

Для этого кода массив будет отсортирован отдельно по четным и нечетным(за исключением самого первого элемента массива, который не будет участвовать в сортировке). В минус не уйдешь.
 
Для этого кода массив будет отсортирован отдельно по четным и нечетным(за исключением самого первого элемента массива, который не будет участвовать в сортировке). В минус не уйдешь.
upload_2020-2-27_11-39-31.png
В тестах меняются только нечёт :fellow: