Функция должна реорганизовать масив , переставив все нечетные в лево
Функция принимает массив целочисленных чисел, диапазон значений которых составляет от 0 до 100. В функции нужно переставить элементы массива, так что в левой стороне были все нечетные числа а справа все четные. Например, массив 1, 4, 5, 8, 9 должен быть переписан на 1, 5, 9, 4, 8.
Код:
unsigned* segregateEvenOdd(unsigned array[], const size_t size)
{
for (int index = 1; index <= size; ++index)
{
if (array[index] % 2 == 0)
{
std::swap(array[index], array[index + 1]);
}
}
array[size] = 0;
return array;
}
int main()
{
int size = 100;
unsigned array[101];
for (unsigned index = 0; index <= size; ++index)
{
array[index] = index;
}
std::cout << "segregateEvenOdd: " << segregateEvenOdd(array, size) << "\n";
return 0;
}
Какой у меня вопрос:
Я не правильно массив в функции возвращаю? Потому что отображается следующее:
segregateEvenOdd: 000000E9B9DEF9C8
Из -за того, что я не правильно возвращаю массив, я не знаю, правильно ли сделалала задания. Поэтому я буду рада советам о том, как улучшить мой код.
Почему то только один индекс берет и проверяет и меняет местами. Не переходит на слудещий:
Index:2 Index1:3 Index2:2
Ответы (1 шт):
Ну, раз требуется полная сортировка, просто пишем соответствующую функцию-компаратор, которая сравнивает два числа с учетом четности:
int main(int argc, char * argv[])
{
int array[] = {3,6,9,8,2,1,5,4,7};
sort(array,array+size(array),
[](int a, int b) {
if (a%2 != b%2) return (b%2 < a%2);
return a < b;
});
for(int a: array) cout << a << " ";
}
Ну, или, например, так:
bool compare(int a, int b)
{
if (a%2 != b%2) return (b%2 < a%2);
return a < b;
};
int main(int argc, char * argv[])
{
int array[] = {3,6,9,8,2,1,5,4,7};
sort(array,array+size(array),compare);
for(int a: array) cout << a << " ";
}