Разделение чисел ODD и EVEN в массиве с использованием C ++ - PullRequest
2 голосов
/ 13 октября 2019

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

Это мой код.

#include <iostream>

void sortOdd(int arr[], int size) {
int odd = 0;
int even = size - 1;

while (even > odd) {
  int temp;

  while(arr[odd] % 2 != 0) {
    odd++;
  }
  while(arr[even] % 2 == 0) {
    even--;
  }

  temp = arr[odd];
  arr[odd] = arr[even];
  arr[even] = temp;
  odd++;
  even--;
}
}

int main () {

int arr[] = {1, 2, 3, 4, 5, 6};
int size = sizeof(arr) / sizeof(arr[0]);


cout << "unsorted array" << endl;
for (int i = 0; i < size; i++) cout << arr[i] << " ";

sortOdd(arr, size);

cout << "sorted array" << endl;
for (int i = 0; i < size; i++) cout << arr[i] << " ";


  return 0;
}

Проблема в том, что он сортирует / заменяет только внешние элементы, а не средние, и выдает что-то вроде этого:

unsorted array
1 2 3 4 5 6
sorted array
1 5 4 3 2 6

Может кто-нибудь помочь с тем, что я делаюздесь не так?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

Вы можете использовать std::partition так:

std::partition(std::begin(arr), std::end(arr), [](int a) {
    return a % 2;
});
0 голосов
/ 13 октября 2019

Измените условие while на следующее:

while (even > odd+1)

Ваш алгоритм работает по большей части, но вы взяли одну дополнительную итерацию и поменяете ваши средние значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...