题目:输入一个数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数
位于数组的后半部分,要求时间复杂度为O(n).
#include <assert.h>
#include <stdio.h>
void swap (int * a , int *b) //交换两个数字
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void push_odd_before_even(int * a ,int n)
{
assert(a);
int * begin = &a[0]; //指向数组首元素
int * end = &a[n-1]; //指向数组末尾元素
for (int i = 0; i < n; i++ )
{
if((*begin & 1)&&(begin!=end)) //是奇数就移到下一位,直接跳到下一循环
{
begin++;
continue;
}
else //是偶数就放到最后去
{
swap(begin, end);
*end--;
}
}
}
int main( )
{
int a[ ] = {1,5,3,9};
int n = sizeof(a)/sizeof(int);
push_odd_before_even(a,n);
for (int i=0; i<n; i++)
{
printf("%d ", a[i]);
}
return 0;
}