Как мне отсортировать первую половину массива по парным индексам?
Есть массив из 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] сравнивая элемент с другим через другой.