Java:操作数组

时间:2013-07-02 03:30:12

标签: java arrays

我理解如何按升序和降序排序array,但我正在尝试创建一个特定的模式。例如,我有一个随机顺序的array。我如何在模式中对此array进行排序? “最小,最大,第二小,第二大,第三大,第三大......”等等。任何想法?

int[] pattern = {8, 6, 1, 2, 3, 80, 56};

//这是开始

public class Test2 {

    public static void main(String[] args) {
        int[] array = {1,4,2,6,9,3,65,77,33,22};
        for (int i = 0; i < array.length; i++) {
            System.out.print(" " + array[i]);
        }
        wackySort(array);

    }

    //This sorts the array    
    public static void wackySort(int[] nums) {
        int sign = 0;
        int temp = 0;
        int temp2 = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums.length -1; j++) {
                if (nums[j] > nums[j+1]) {
                    temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;

                }
            }
        }
        System.out.println();
        int firstPointer = 0;
        int secondPointer = nums.length -1;
        int[] newarray = new int[nums.length];
        for (int i = 0; i < nums.length; i+=2) {
            newarray[i] = nums[firstPointer++];
            newarray[i] = nums[secondPointer--];
        }
        for (int i = 0; i < newarray.length; i++) {
            System.out.print(" " + newarray[i]);
        }
    }
}

5 个答案:

答案 0 :(得分:5)

看起来像家庭作业。这是一个简单的提示

第1步:按升序对数组进行排序

{1, 2, 3, 6, 8, 56, 80};

第2步:分配一个大小相同的新数组

第3步遍历第一个数组,两个计数器。一开始一分,最后另一分。现在在新数组中分配第一个计数器的数据然后将计数器增加一个。接下来分配最后一个计数器的数据并将其减一。

    int firstPointer = 0;
    int secondPointer = nums.length - 1;
    int[] newarray = new int[nums.length];
    int i = 0;
    for (i = 0; i < nums.length-1; i += 2) {
        newarray[i] = nums[firstPointer++];
        newarray[i+1] = nums[secondPointer--];
    }
    if(i<nums.length-1)
        newarray[i] = nums[firstPointer++];

答案 1 :(得分:1)

你可以先排序,然后从第二个元素开始,与最后一个元素交换等等。

答案 2 :(得分:1)

尝试使用列表而不是数组。

public <T extends Comparable<? super T>> List<T> interleave(List<T> list) {
    final int size = list.size();
    final List<T> sorted =  new ArrayList<T>(list);
    Collections.sort(sorted);  // Now, it's sorted.
    final List<T> reversed = new ArrayList<T>(sorted);
    Collections.reverse(reversed); // Now, it's reverse sorted.
    final List<T> interleaved = new ArrayList<>();
    for (int i= 0; i < size/2; ++i) {
        interleaved.add(sorted.get(i));
        interleaved.add(reversed.get(i));
    }
    if (size % 2 == 1) {
        interleaved.add(sorted.get(size/2 + 1));
    }
    return interleaved;
}

答案 3 :(得分:0)

也许您可以(或必须)先对数组进行排序,然后将元素放入您的订单中。 实现Comparable或Comparator,以便您可以定义数组中元素的排序方式。以下页面可能有所帮助:enter link description here

答案 4 :(得分:0)

此代码执行古怪的排序:

public static void wackySort(int[] nums) {
    Arrays.sort(nums);
    int size = nums.length;
    int[] result = new int[size];
    for (int i = 0; i < size / 2; i++) {
        result[i * 2] = nums[i];
        result[i * 2 + 1] = nums[size - 1 - i];
    }
    // one extra copy is required to handle both odd and even array sizes
    result[size - 1] = nums[size / 2];
    System.arraycopy(result, 0, nums, 0, size);
}

这是一些测试代码:

public static void main(String[] args) {
    int[] oddSize = { 8, 6, 1, 2, 3, 80, 56 };
    wackySort(oddSize);
    System.out.println(Arrays.toString(oddSize));
    int[] evenSize = { 8, 6, 1, 2, 3, 80, 56, 5 };
    wackySort(evenSize);
    System.out.println(Arrays.toString(evenSize));
}

输出:

[1, 80, 2, 56, 3, 8, 6]
[1, 80, 2, 56, 3, 8, 5, 6]