经典算法——调整数组顺序使奇数位于偶数前面

本文介绍了一种算法,用于将整数数组中的所有奇数放在前面,所有偶数放在后面,同时保持相同类型数字间的相对顺序不变。采用类似冒泡排序的方法,当遇到前面是偶数而后面是奇数的情况时进行交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

二、解题思路

方法一:冒泡算法思想,当前面数字为偶数,后面数字为奇数时,相互交换,否则不交换




为了完成这一任务,可以采用双指针法来提高效率。以下是具体的解题思路: ### 算法设计 假设我们有一个顺序表 `L` ,其中存储了互不相同的整数。 **步骤如下:** 1. **初始化两个指针** - 指针 `left` 初始化指向数组的第一个元素 (`index = 0`)。 - 指针 `right` 初始化指向数组的最后一个元素 (`index = length-1`)。 2. **遍历过程** - 如果左指针所指元素是奇数,则右移左指针(`++left`); - 否则如果右指针所指元素是偶数,则左移右指针(`--right`); - 当左右两头都遇到了需要调整位置的情况(即左边遇到偶数、右边遇到奇数),交换这两个值,并继续上述操作直到 `left >= right`. 3. **终止条件** - 循环结束当 `left == right + 1`, 即所有的奇数都在偶数之前; 4. **返回处理后的结果列表** 或者直接原地修改不需要额外空间开销; 这里给出一种Python语言的具体实现代码示例: ```python def move_odd_to_front(L): left, right = 0, len(L) - 1 while left < right: # Move the left pointer until an even number is found. while L[left] % 2 != 0 and left < right: left += 1 # Move the right pointer until a odd number is found. while L[right] % 2 == 0 and left < right: right -= 1 if left < right: # Swap elements at positions pointed by 'left' and 'right' L[left], L[right] = L[right], L[left] return L ``` 此段程序能够有效保证最终得到的结果满足题目要求——所有奇数排在前而所有偶数随后排列。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值