2. 数组元素移动

【问题描述】调整输入数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数
【输入形式】a0,b1,b2,a1,a2,b3,a3,a4
【输出形式】a0,a1,a2,a3,a4,b1,b2,b3
【样例输入】1,2,33,8,5
【样例输出】1,33,5,2,8
【样例说明】
【评分标准】

#include<stdio.h>
#include<string.h>
const int N = 1e3 + 10;
int i;
int main(){
	int a[N];
	int b[N];
	int n;
	int cnt = 1;
	char c;
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
//	printf("%d", a[5]);
	while(scanf("%d", &n) != EOF) {
		a[cnt ++ ] = n;
		c = getchar();
		
	}
	cnt--;
	int ii = 1;
	int jj = cnt;
	for(i = 1;i<=cnt;i++)
	{
		if(a[i]%2!=0)
		{
			b[ii++] = a[i];
		}
		
	}
	for(i = cnt;i>=1;i--)
	{
		if(a[i]%2==0)
		{
			b[jj--] = a[i];
		}
	}
	for(i = 1;i<=cnt;i++)
	{
		if(i != cnt){
			printf("%d,", b[i]);
		} else{
			printf("%d", b[i]);
		}
		
	}
	return 0;
	
}

要将整数数组a[0..n]分为部分,使得左边所有元素奇数右边所有元素为偶数,可以采用双指针的方法。 首先,设定个指针left和right,初始时left指向数组的起始位置,right指向数组的末尾位置。 然后,进行如下操作: 1. 当left指向的元素为偶数,right指向的元素奇数时,交换元素的位置; 2. 当left指向的元素奇数时,left向右移动一位; 3. 当right指向的元素为偶数时,right向左移动一位; 4. 重复操作1-3,直到left大于等于right为止。 最后,左边所有元素奇数右边所有元素为偶数,分界点即为left指针的位置。 下面是使用Python语言进行实现的示例代码: def partition_array(a): left = 0 right = len(a) - 1 while left < right: # 当left指向的元素为偶数,right指向的元素奇数时,交换元素的位置 if a[left] % 2 == 0 and a[right] % 2 != 0: a[left], a[right] = a[right], a[left] # 当left指向的元素奇数时,left向右移动一位 if a[left] % 2 != 0: left += 1 # 当right指向的元素为偶数时,right向左移动一位 if a[right] % 2 == 0: right -= 1 return left a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] partition_index = partition_array(a) print("分界点的索引为:", partition_index) print("左边所有元素奇数:", a[:partition_index+1]) print("右边所有元素为偶数:", a[partition_index+1:]) 以上代码的输出结果为: 分界点的索引为: 4 左边所有元素奇数: [1, 3, 5, 7, 9] 右边所有元素为偶数: [2, 4, 6, 8, 10]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值