数组奇偶分区是将整数数组重排为偶数在前、奇数在后,常用双指针法:左指针找奇数、右指针找偶数,相遇前交换,时间o(n)、空间o(1)。

什么是数组奇偶分区
数组奇偶分区是指将一个整数数组重新排列,使得所有偶数排在前面,所有奇数排在后面(或反之),不要求保持原有顺序,但通常要求原地完成、时间复杂度 O(n)、空间复杂度 O(1)。
双指针法(推荐)
使用左右两个指针从数组两端向中间扫描,左指针找奇数,右指针找偶数,找到后交换。这是最常用且高效的方法。
- 初始化 $left = 0,$right = count($arr) - 1
- 当 $left 时循环:
- 左指针向右移动,跳过偶数($arr[$left] % 2 == 0)
- 右指针向左移动,跳过奇数($arr[$right] % 2 == 1)
- 若两指针未相遇,交换 $arr[$left] 和 $arr[$right]
- 循环结束后,数组完成分区:左侧全为偶数,右侧全为奇数
单次遍历法(稳定分区,可选)
如果希望保持偶数/奇数内部的相对顺序(即“稳定”分区),可用额外数组或插入式逻辑,但会牺牲空间或时间效率。常见做法是:
网奇.NET网络商城系统是基于.Net平台开发的免费商城系统。功能强大,操作方便,设置简便。无需任何设置,上传到支持asp.net的主机空间即可使用。系统特色功能:1、同时支持Access和SqlServer数据库;2、支持多语言、多模板3、可定制缺货处理功能4、支持附件销售功能5、支持会员组批发功能6、提供页面设计API函数7、支持预付款功能8、配送价格分地区按数学公式计算9、商品支持多类别,可
- 新建两个空数组:$evens = [] 和 $odds = []
- 遍历原数组,根据 $num % 2 === 0 分别追加到对应数组
- 合并:array_merge($evens, $odds)
该方法时间复杂度 O(n),空间复杂度 O(n),适合对稳定性有要求且不严格限制内存的场景。
立即学习“PHP免费学习笔记(深入)”;
注意事项与边界处理
实际编码中需注意以下细节:
- 空数组或单元素数组直接返回,避免越界访问
- 判断奇偶用 % 2 === 0 更安全(避免负数取模结果歧义;PHP 中负数 % 2 可能为 -1,建议用 abs($n) % 2 或 $n & 1 判断奇数)
- 若要求奇数在前、偶数在后,只需调换判断逻辑(左找偶、右找奇)
- 原地交换时确保 $left !== $right 再交换,避免自交换










