Функция должна реорганизовать масив , переставив все нечетные в лево

Функция принимает массив целочисленных чисел, диапазон значений которых составляет от 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;
}

Какой у меня вопрос:

  1. Я не правильно массив в функции возвращаю? Потому что отображается следующее:

     segregateEvenOdd: 000000E9B9DEF9C8
    
  2. Из -за того, что я не правильно возвращаю массив, я не знаю, правильно ли сделалала задания. Поэтому я буду рада советам о том, как улучшить мой код.

  3. Почему то только один индекс берет и проверяет и меняет местами. Не переходит на слудещий:

    Index:2
    Index1:3
    Index2:2
    

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

Автор решения: Harry

Ну, раз требуется полная сортировка, просто пишем соответствующую функцию-компаратор, которая сравнивает два числа с учетом четности:

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 << " ";
}
→ Ссылка