Как мне отсортировать первую половину массива по парным индексам?

Есть массив из 16 элементов. Нужно отсортировать первую половину массива по парным индексам.

Например есть массив arr = [6, 5, 4, 3, 2, 1], тогда отсортированный по первой половине и парным индексам массив будет выглядеть так arr = [4, 5, 6, 3, 2, 1]

Ниже приведен код, который при выводе выдает массив arr = [5, 6, 4, 3, 2, 1].

Подскажите где у меня ошибка в коде.

#include <iostream>
#include <stdio.h>
#include <ctime>
using namespace std;
int main() {

int const SIZE = 16;


int mas[SIZE];

srand(time(NULL));

for (int i = 0; i < SIZE; i++) {
    mas[i] = rand() % 100;
    cout << mas[i] << "  ";

}
int zapus;
for (int i = 0; i < (SIZE / 2) - 1; i++) {
    for (int j = 0; j < (SIZE/2) - i - 1; j++) {
        if (mas[j] > mas[j + 1]&& j % 2 == 0) {
            zapus = mas[i];
            mas[i] = mas[i + 1];
            mas[i + 1] = zapus;
            //swap(mas[j], mas[j + 1]);

        
        }
    
    
    }


}
cout <<endl<< "SORTIROVKA" << endl;
for (int i = 0; i < SIZE; i++) {
    cout << mas[i] << "  ";
}

return 0;
}

Ответы (1 шт):

Автор решения: Павел Ериков

Если я правильно понял, что вам нужно было, то вот пример кода:

int size_2 = SIZE / 2;
int zapus;
//В оригинальном алгоритме сортировки мы отступает от правой границы на 1
//т.к. знаем, что там находится уже самое бОльшое число. Но в нашем случае
//мы пропускаем 2 числа. Самое бОльшое и с индексом не кратным двум.
for (int i = 0; i < size_2 - 1; i += 2) {
    //Вместо проверки на кратность j проходим просто по четным числам
    for (int j = 0; j < size_2 - i - 2; j += 2) {
        //Сравниваем элемент под индексом j с элементом через 1.
        //то есть с индексом j + 2
        if (mas[j] > mas[j + 2]) {
            zapus = mas[j];
            mas[j] = mas[j + 2];
            mas[j + 2] = zapus;
        }
    }
}

Алгоритм производит сортировку пузырьком на промежутке от [0, SIZE / 2] сравнивая элемент с другим через другой.

→ Ссылка