java - 有没有一种方法可以更优雅地将数组排序为偶数和奇数?

标签 java arrays sorting

我正在尝试对整数数组进行排序,使所有偶数都在奇数之前,而不使用任何外部库。 您可能会从以下位置认识到这一点:http://codingbat.com/prob/p105771

"返回一个数组,其中包含与给定数组完全相同的数字,但重新排列,以便所有偶数都位于所有奇数之前。除此之外,数字可以按任何顺序排列。您可以修改并返回给定的数组,或者创建一个新数组。 " 我有实现此目标的代码:

    public int[] evenOdd(int[] nums) {
    int c=0;
    int c2=0;
    int [] nums2=new int[nums.length];
    for(int i=0;i<nums.length;i++)
    {
        if(nums[i]%2==0)
        {
            nums2[c]=nums[i];
            c++;
        }
        else
        {
            nums2[nums.length-c2-1]=nums[i];
            c2++;
        }
    }
    return nums2;
}

我还通过调用 array.sort() 来解决这个问题,然后按索引插入数字,增加 2,然后插入余数。这也有效。

那么,长话短说—— future 是否有更优雅的方式来实现这个目标? 谢谢!

最佳答案

只是我的评论的后续。以下是如何在 O(n) 内完成此操作,无需额外空间:

public class Main {
    public static void main(String[] args) {
        evenOdd(new int[]{1, 2, 3, 4, 5, 6, 7});
        evenOdd(new int[]{2, 3, 4, 5, 6, 7});
        evenOdd(new int[]{1, 1, 1, 1, 1});
        evenOdd(new int[]{2, 2, 2, 2});
    }

    public static void evenOdd(int[] a) {
        int firstOdd = 0;
        for (int i = 0; i < a.length; ++i) {
            if (a[i] % 2 == 0) {
                int t = a[firstOdd];
                a[firstOdd] = a[i];
                a[i] = t;
                firstOdd++;
//            } else {
//                else is redundant, just leave odd in-place
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

关于java - 有没有一种方法可以更优雅地将数组排序为偶数和奇数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888534/

相关文章:

java - MQTT Android 未连接到 ActiveMq

java - AES256 的 Oracle DBMS_CRYPTO.ENCRYPT 初始化 vector 长度

Java Lucene 类路径问题 ubuntu

python - 按表示相同值的多个键对字典进行排序

java - Java (Android) 中按年、月、日排序

c - 在 C 中使用指针对字符串数组进行排序

java - 将 JSONObject 值作为数据库中的单独实体存储在数据库中

php - 使用动态创建的复选框和数组维护复选框值

C 编程——如何将文本文件内容放入我的数组中?

不同类型的python列表到数组