【算法入门03】调整数组顺序使奇数位于偶数前面

本文详细解析了如何调整整数数组,使奇数位于前半部分,偶数位于后半部分,同时保持它们原有的相对位置。介绍了三种不同的方法:一种是双指针法,不改变奇数和偶数的相对位置;第二种是借助辅助容器,分别存储奇数和偶数后再重组;第三种是在原地调整数组,通过移动元素实现目标排序。每种方法的时间复杂度和空间复杂度都有所不同。

核心考点:数组操作,排序思想的扩展使用

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。例如将数组{1, 2, 3, 4, 5, 6}调整为{1, 3, 5, 2, 4, 6}。

解析一:(若相对位置可变)
若是题目当中没有要求数组调整后奇数和奇数,偶数和偶数的相对位置不变,那么我们可以使用两个变量(left和right)来遍历数组,left从左往右寻找偶数,right从右往左寻找奇数,之后将left和right索引的元素进行交换。
在这里插入图片描述
如此进行下去,直到left和right错开为止。

class Solution {
   
   
public:
	void reOrderArray(vector<int> &array) {
   
   
		size_t left = 0, right = array.size() - 1;
		while (left < right)
		{
   
   
			while (left < right&&array[left] % 2 == 1) //left向右找偶数
			{
   
   
				left++;
			}
			while (left < right&&array[right] % 2
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值