调整数组顺序使得奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。

代码:

/*
调整数组顺序使得奇数位于偶数前面
by Rowandjj
2014/8/1
*/
#include<iostream>
#include<stdlib.h>
using namespace std;
//高效解法,但会调整后的数组元素相对顺序会发生改变
void func(int *pArr,int len)
{
	if(pArr == NULL || len <= 1)
	{
		return;
	}
	int low = 0,high = len-1;
	while(low < high)
	{
		while(low < high && (pArr[low] & 0x1) != 0)//low指针后移直到遇到偶数
		{
			low++;
		}
		while(low < high && (pArr[high] & 0x1) == 0)//high指针前移直到遇到奇数
		{
			high--;
		}
		if(low < high)//如果low指针在high指针前面,那就将两个指针所指元素互换
		{
			int temp = pArr[low];
			pArr[low] = pArr[high];
			pArr[high] = temp;
		}
	}
}
//使用辅助数组
void func2(int *pArr,int len)
{
	if(pArr == NULL || len <= 1)
	{
		return;
	}
	int *temp = (int*)malloc(sizeof(int)*len);
	if(!temp)
	{
		exit(-1);
	}
	int i,j = 0;
	for(i = 0 ; i< len; i++)//先将奇数复制到辅助数组前面
	{
		if((pArr[i] & 0x1) !=0)
		{
			temp[j++] = pArr[i];
		}
	}
	for(i = 0; i < len; i++)//再将偶数复制到辅助数组后面
	{
		if((pArr[i] & 0x1) == 0)
		{
			temp[j++] = pArr[i];
		}
	}
	for(i = 0; i < len; i++)//覆盖原数组
	{
		pArr[i] = temp[i];
	}
	free(temp);
}
int main()
{
	int n;
	cin>>n;
	if(n <= 0)
	{
		return 0;
	}
	int *pArr = (int*)malloc(sizeof(int)*n);
	if(!pArr)
	{
		return 0;
	}
	for(int i = 0; i < n; i++)
	{
		cin>>*(pArr+i);
	}
	func2(pArr,n);
	for(int j = 0; j < n; j++)
	{
		if(j == n-1)
		{
			cout<<*(pArr+j)<<"\n";
		}else
		{
			cout<<*(pArr+j)<<" ";
		}
	}
	free(pArr);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值