我对编程并不陌生,我需要通过调用函数在左侧具有所有奇数,在右侧具有偶数来对整数数组进行排序。
这是我的代码。
#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
有人可以帮我在这里做错什么吗?
谢谢。
答案 0 :(得分:2)
您可以像这样使用std::partition
:
std::partition(std::begin(arr), std::end(arr), [](int a) {
return a % 2;
});
答案 1 :(得分:0)
将您的while条件更改为此:
while (even > odd+1)
您的算法大部分时候都起作用,但是您又进行了一次迭代,它交换了您的中间值。