调整数组使得奇数在前偶数在后

本文介绍了一种算法,用于调整整数数组,使所有奇数位于数组的前半部分,所有偶数位于后半部分。通过定义两个指针head和tail,分别从数组两端开始遍历,遇到奇数和偶数时进行交换,最终实现奇偶分离。代码实现包括一个交换函数和主要的调整数组顺序的函数。

调整数组使得奇数在前偶数在后

        题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

        思路:定义两个指针,分别记作headtailhead一直往后走,直到指向的数据不是奇数时,交换headtail所指的数据。tail一直往前走,直到指向的数据不是偶数时,交换headtail所指的数据。

        代码实现

 // 调整数组使得奇数在前,偶数在后
    public static int[] exchange(int[] nums){
        int head = 0;
        int tail = nums.length-1;
        while(head < tail){
            // 头指针遇到奇数 就++
            if(nums[head] %2 !=0){
                head++;
            }else{
                swap(nums,head,tail);
            }

            if (nums[tail] %2 == 0){
                tail--;
            }else{
                swap(nums,head,tail);
            }

        }
        return nums;
    }


    private static void swap(int[] nums,int head,int tail){
        int tmp = nums[head];
        nums[head] = nums[tail];
        nums[tail] = tmp;
    }
### 使用 Java 链表实现调整数组顺序使得奇数位于偶数 在 Java 中,可以通过链表结构实现对数组的重新排列,使得所有奇数出现在偶数。这种方法的核心在于遍历原始数组,将奇数偶数分别存储到两个不同的链表中,最后将偶数链表合并到奇数链表的末尾,从而得到符合要求的顺序[^2]。 以下是具体的 Java 实现代码: ```java import java.util.LinkedList; public class ReOrderArray { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9}; LinkedList<Integer> result = reOrderArray(array); System.out.println(result); } public static LinkedList<Integer> reOrderArray(int[] array) { LinkedList<Integer> oddList = new LinkedList<>(); LinkedList<Integer> evenList = new LinkedList<>(); for (int num : array) { if (num % 2 != 0) { oddList.add(num); // 奇数添加到奇数链表 } else { evenList.add(num); // 偶数添加到偶数链表 } } oddList.addAll(evenList); // 将偶数链表合并到奇数链表末尾 return oddList; } } ``` 该实现通过两个 `LinkedList` 分别存储奇数偶数。遍历原始数组时,根据数值的奇偶性决定其归属链表。最终将偶数链表添加到奇数链表的末尾,从而实现奇数偶数在后的顺序[^1]。 ### 相关问题 1. 如何使用 Java 集合中的 `ArrayList` 替代链表实现调整数组顺序? 2. 如何在不使用额外存储空间的情况下调整数组顺序使得奇数位于偶数? 3. 如何扩展该算法以支持负数和零的处理? 4. 如何在调整数组顺序时保持原始奇偶元素的相对顺序不变? 5. 如何将此算法应用于多维数组或复杂对象的排序?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值