H面试(24):调整数组顺序使奇数位于偶数前面

题目:输入一个数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数

位于数组的后半部分,要求时间复杂度为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;
}





你可能感兴趣的:(H面试(24):调整数组顺序使奇数位于偶数前面)