阵列甚至&奇怪的排序

时间:2010-10-14 07:11:54

标签: java

我有一个数组,我有一些数字。现在我想在单独的数组中对偶数进行排序,在单独的数组中对奇数进行排序。有没有API可以做到这一点。我试过这个

int[] array_sort={5,12,3,21,8,7,19,102,201};
int [] even_sort;
int i;
for(i=0;i<8;i++)
{

if(array_sort[i]%2==0)
{
     even_sort=Arrays.sort(array_sort[i]);//error in sort

System.out.println(even_sort);
}
}

7 个答案:

答案 0 :(得分:10)

简单明了。

int[] array_sort = {5, 12, 3, 21, 8, 7, 19, 102, 201 };

List<Integer> odd = new ArrayList<Integer>();
List<Integer> even = new ArrayList<Integer>();
for (int i : array_sort) {
    if ((i & 1) == 1) {
        odd.add(i);
    } else {
        even.add(i);
    }
}
Collections.sort(odd);
Collections.sort(even);
System.out.println("Odd:" + odd);
System.out.println("Even:" + even);

答案 1 :(得分:2)

使用番石榴做这件事很简单。

  • 使用Ints.asList创建List<Integer>
  • int[]实时视图
  • 定义Function<Integer,Boolean> isOdd
  • 使用Ordering自然地比较onResultOf(isOdd)(首先是false,然后是true
  • 如有必要,请compound Ordering.natural()

以下是片段:

    int[] nums = {5,12,3,21,8,7,19,102,201};
    Function<Integer,Boolean> isOdd = new Function<Integer,Boolean>() {
        @Override
        public Boolean apply(Integer i) {
            return (i & 1) == 1;
        }
    };
    Collections.sort(
        Ints.asList(nums),
        Ordering.natural().onResultOf(isOdd)
            .compound(Ordering.natural())
    );
    System.out.println(Arrays.toString(nums));
    // [8, 12, 102, 3, 5, 7, 19, 21, 201]

请注意,所有偶数首先显示,然后显示所有奇数。在每个组中,数字自然排序。

外部链接

答案 2 :(得分:2)

您提出的问题没有意义,代码也没有。所以我猜你想把数组的元素分成两个数组,一个包含几率和另一个数。如果是这样,那就这样做:

int[] input = {5, 12, 3, 21, 8, 7, 19, 102, 201};
List<Integer> evens = new ArrayList<Integer>();
List<Integer> odds = new ArrayList<Integer>();
for (int i : input) {
    if (i % 2 == 0) {
        evens.add(i);
    } else {
        odds.add(i);
    }
}

如果是int,则可以将Integer列表转换为已排序的数组:

List<Integer> list ...
int[] array = new int[list.size()];
for (int i = 0; i < array.length; i++) {
    array[i] = list.get(i);
}
Arrays.sort(array);

或者如果您需要排序的List<Integer>,请执行以下操作:

Collections.sort(list);

答案 3 :(得分:1)

首先要了解一些事情:

  • 您必须在使用之前初始化数组。例如int[] even_sort = new int[3];
  • 在java数组中有一个静态大小。这意味着您将无法添加任意数量的元素。您必须先选择尺码。你应该看一下Java Collections,这是摆脱java方式的“规则”的好方法。
  • Arrays.sort()方法仅适用于数组。此处array_sort[i]int
  • Arrays.sort()对数组进行排序但不返回任何内容。

如果你真的想使用数组(但你不应该),你可以做这样的事情来调整一个:

int[] even_sort = new int[3]{1, 2, 3};
int[] temp = new int[4];
System.arraycopy(even_sort, 0, temp, 0, even_sort.length);
even_sort = temp;
even_sort[3] = 4;

另一种方法是创建一个实用方法,该方法使用反射来创建新数组:

import java.lang.reflect.Array;

public Object resizeArray(Object originalArray, int newSize){
    int originalSize = Array.getLength(originalArray);
    Class arrayType = originalArray.getClass().getComponentType();
    Object newArray = Array.newInstance(arrayType, newSize);
    System.arraycopy(originalArray, 0, newArray, 0, Math.min(originalSize, newSize));
    return newArray;
}

因此,如果你仍然想要出于某些原因使用数组(但你仍然不应该),这里有一个代码来过滤,调整大小和排序你的数组。

int[] arrayToFilterAndSort = {5, 12, 3, 21, 8, 7, 19, 102, 201};
int[] sortedEvens = new int[0];
for(int current : arrayToFilterAndSort){
    if((current & 1) == 1){
        sortedEvens = resizeArray(sortedEvens, sortedEvens.length + 1);
        sortedEvens[sortedEvens.length - 1] = current;
    }
}
Arrays.sort(sortedEvens);

资源:

答案 4 :(得分:1)

package com.java.util.collection;

import java.util.Arrays;

/**
 * Given n random numbers. Move all even numbers on left hand side and odd numbers on right hand side and 
 * then sort the even numbers in increasing order and odd numbers in decreasing order For example, 
 * i/p : 3 6 9 2 4 10 34 21 5 
 * o/p: 2 4 6 10 34 3 5 9 21
 * @author vsinha
 *
 */
public class EvenOddSorting {

    public static void eventOddSort(int[] arr) {
        int i =0;
        int j =arr.length-1;
        while(i<j) {
            if(isEven(arr[i]) && isOdd(arr[j])) {
                i++;
                j--;
            } else if(!isEven(arr[i]) && !isOdd(arr[j])) {
                swap(i,j,arr);
            } else if(isEven(arr[i])){
                i++;
            } else{
                j--;
            }

        }   
        display(arr);
        // even number sorting
        Arrays.sort(arr,0,i);
        Arrays.sort(arr,i,arr.length);
        // odd number sorting
        display(arr);

    }

    public static void display(int[] arr) {
        System.out.println("\n");
        for(int val:arr){
            System.out.print(val +"  ");
        }
    }

    private static void swap(int pos1, int pos2, int[] arr) {
        int temp = arr[pos1];
        arr[pos1]= arr[pos2];
        arr[pos2]= temp;
    }

    public static boolean isOdd(int i) {
        return (i & 1) != 0;
    }
    public static boolean isEven(int i) {
        return (i & 1) == 0;
    }
    public static void main(String[] args) {
        int arr[]={3, 6, 9 ,2, 4, 10, 34, 21, 5};
        eventOddSort(arr);
    }
}

答案 5 :(得分:-1)

package srikanth dukuntla;

public class ArrangingArray {

    public static void main(String[] args) {
        int j=0;
        int []array={1,2,3,5,4,55,32,0};
        System.out.println(array.length);
        int n=array.length/2;
        for (int i=0; i<array.length; i++){

            if(array[i]%2!=0){
                j=1;

                int temp=array[array.length-j];
            if(temp % 2!=0){

                while((array[array.length-(j+1)]%2!=0) && (array.length-(j+1)>n)){
                        j++;
                }
                    int temp2=array[array.length-(j+1)];
                     array[array.length-(j+1)] =array[i];
                      array[i]=temp2;

                }else // inner if
                {
                 array[array.length-j] =array[i];
                  array[i]=temp;
                }

            }else //main if
            {
                //nothing needed

            }

        }

        for(int k=0;k<array.length;k++) {
            System.out.print(" "+ array[k]);
        }

    }

}

答案 6 :(得分:-1)

List < Integer > odd = new ArrayList < Integer > ();

List < Integer > even = new ArrayList < Integer > ();

int a [] = {0,2,3,98,1,6546,45323,1134564};

int i;
for (i = 0; i < a.length; i++) {

    if (a[i] % 2 == 0) {

        even.add(a[i]);

    } else {

        odd.add(a[i]);

    }
}

System.out.print("Even: " + even + "\n");
System.out.print("Uneven: " + odd + "\n");
}
}