使用C ++

时间:2019-10-12 23:46:02

标签: c++ arrays algorithm sorting

我对编程并不陌生,我需要通过调用函数在左侧具有所有奇数,在右侧具有偶数来对整数数组进行排序。

这是我的代码。

#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 个答案:

答案 0 :(得分:2)

您可以像这样使用std::partition

std::partition(std::begin(arr), std::end(arr), [](int a) {
    return a % 2;
});

答案 1 :(得分:0)

将您的while条件更改为此:

while (even > odd+1)

您的算法大部分时候都起作用,但是您又进行了一次迭代,它交换了您的中间值。