调整数组顺序

本文介绍了一种使用栈来实现的数组重排序算法,该算法能够将数组中的奇数元素置于偶数元素之前,并通过两次遍历和一次逆序输出完成整个操作过程。




void CodeComplite::reOrderArray(vector<int> &array)

{
/*
    //冒泡法,时间换空间
    if (0 == array.size())
    {
        return;
    }
    int temp = 0;
    int i = 0,j=0;
    for (i = 0; i < array.size(); i++)
    {
        for (j = array.size()-1; j>0; j--)
        {
            if (array.at(j) % 2 == 1 && 0 == array.at(j - 1) % 2)
            {
                swap(array.at(j), array.at(j - 1));
            }
        }
    }
    */

    //方案二
    stack<int>s1;
    int i = 0;
    for (i = 0; i < array.size(); i++)
    {
        if (1 == array.at(i) % 2)
        {
            s1.push(array.at(i));
        }
    }
    for (i = 0; i < array.size(); i++)
    {
        if (0 == array.at(i) % 2)
        {
            s1.push(array.at(i));
        }
    }
    i =array.size()-1;
    while (!s1.empty())
    {
        array.at(i) = s1.top();
        s1.pop();
        i--;
    }
}
### 使用 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、付费专栏及课程。

余额充值