C++
从数组的左右两边开始往中间扫,左边遇到偶且右边遇到奇,则左右调换,若一边遇到奇或偶则继续往前走,知道左右相遇结束。最差时间复杂度O(N),最好在O(N/2)能完成
void sort(int N, int a[]) {
int left = 0;
int right = N-1;
int tmp = 0;
while(left < right)
{
if(a[left]%2 == 0 && a[right]%2 == 1)
{
tmp = a[left];
a[left] =a[right];
a[right] = tmp;
left ++;
right --;
}
else if(a[left]%2 == 0 && a[right] %2 ==0)
{
right--;
}
else if(a[left]%2 == 1 && a[right] %2 == 1)
{
left ++;
}
else
{
left ++;
right --;
}
}
}