温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-11 18:11:56 来源:网络 阅读:204 作者:秋笙夏笛 栏目:编程语言

第一种:

开辟一个一样大小的数组,遍历原数组的数据,把原数组奇数依次存放在新数组的前面,偶数存放在后面。

时间复杂度:O(n^2);

空间复杂度:O(n)

缺陷:效率太差

#include<stdio.h>
#include<stdlib.h>
void Adjust(int* src,int* des,int n)
{
	int index=0;
		for(int j=0;j<n;j++)
		{
			if(src[j]%2)
			{
				des[index]=src[j];
				index++;
			}
		}
		for(int j=0;j<n;j++)
		{
			if(!(src[j]%2))
			{
				des[index]=src[j];
				index++;
			}
		}
	
}
void test()
{
	int a1[10]={2,4,4,66,76,86,20,10,24,18};
	int a2[10]={1,3,5,35,15,13,17,19,17,21};
	int a3[10]={1,2,5,36,16,13,17,19,14,21};
	int a[10];
	Adjust(a3,a,sizeof(a3)/sizeof(a3[0]));
	for(int i=0;i<sizeof(a3)/sizeof(a3[0]);i++)
	{
		printf("%d ",a3[i]);
	}
	printf("\n");
	for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
	{
		printf("%d ",a[i]);
	}
}
int main()
{
	test();
	system("pause");
	return 0;
}

结果:

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

第二种:

利用两个指针,一个指向数组开始,一个指向数组末尾,指向数组开始的那个指针依次向后遍历,找到偶数立即停下来,指向数组末尾的那个指针向前遍历,找到奇数停下来,判断start<=end,,交换两个值。

#include<stdio.h>
#include<stdlib.h>
bool Check(int num)
{
	return num%2;
}
void swap(int* a,int *b)
{
	int tmp=*a;
	*a=*b;
	*b=tmp;
}
void Adjust(int* a,int n)
{
	int start=0;
	int end=n-1;
	while(start<=end)
	{
		while(Check(a[start])&&start<=end)
		{
			start++;
		}
		while(!(Check(a[end]))&&start<=end)
		{
			end--;
		}
		if(start<end)
		{
			swap(&a[start],&a[end]);
		}
	}

}
void test()
{
	int a1[10]={2,4,4,66,76,86,20,10,24,18};
	int a2[10]={1,3,5,35,15,13,17,19,17,21};
	int a3[10]={1,2,5,36,16,13,17,19,14,21};
	Adjust(a1,sizeof(a1)/sizeof(a1[0]));
	for(int i=0;i<sizeof(a1)/sizeof(a1[0]);i++)
	{
		printf("%d ",a1[i]);
	}
	printf("\n");
	Adjust(a2,sizeof(a2)/sizeof(a2[0]));
	for(int i=0;i<sizeof(a2)/sizeof(a2[0]);i++)
	{
		printf("%d ",a2[i]);
	}
	printf("\n");
	Adjust(a3,sizeof(a3)/sizeof(a3[0]));
	for(int i=0;i<sizeof(a3)/sizeof(a3[0]);i++)
	{
		printf("%d ",a3[i]);
	}
}
int main()
{
	test();
	system("pause");
	return 0;
}

结果:

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI