题目:在一个N个整数数组里面,有多个奇数和偶数,设计一个算法,令所有的奇数都在偶数左边。
解题思路:想到的第一个思路是定义两个指针,第一个指针p指向数组的第一个元素,第二个指针q指向数组的最后一个元素,然后让p向后遍历,让q向前遍历,直到p找到第一个偶数,q找到第一个奇数,交换两个元素,继续让两个指针遍历数组,直到q在p的前面,这样就保证数组中所有奇数在偶数前面。代码如下:
#include <iostream>
using namespace std;
void swap(int& a, int& b){
int temp = a;
a = b;
b = temp;
}
void odd_before_even(int *arr, int length){
if (arr == NULL || length == 0){
return;
}
int start = 0;
int end = length - 1;
while (start < end){
while ((start < end) && ((arr[end] & 1) != 1)){
end--;
}
while ((start < end) && ((arr[start] & 1) != 0)){
start++;
}
if (start < end){
swap(arr[start], arr[en