1. 先将偶数放在前面,奇数放在后面,然后在交换 a[i] <--> a[2n - i] for i=left+1 ~ n 共 2n + n/2
2. 找出奇数在偶数位 与 偶数在奇数位,然后交换 4*n
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 1000000
void oddEven1(int a[],int left,int right)
{
int i=left,j = right;
int tmp = 0;
while(i<j){
while(i<=right && a[i] % 2 == 0)
i++;
while(j>=left && a[j] % 2 == 1)
j--;
if(i<j)
tmp = a[i],a[i] = a[j], a[j] = tmp;
}
j = left + (right - left)/2;
for(i=left+1;i <=j;i += 2)
tmp = a[i],a[i] = a[right - i],a[right - i] = tmp;
}
void oddEven2(int a[], int left,int right)
{
int i = left,j = right;
int tmp = 0;
while(i<=right){
while(i<= right)
if(i % 2 == 0 && a[i] % 2 ==1)
break