交换数组中的两个元素

时间:2015-09-07 16:16:16

标签: java arrays

我正在做mooc.fi,我的代码有效,但不会提交。

我得到的错误

方法swap与参数4,7,8,6无法正常工作index1 = 0 index2 = 3

结果是4,7,8,6但它应该是6,7,8,4

使用参数10,20,6,-1,13,11

,方法排序无法正常工作

结果是10,20,6,-1,13,11,但它应该是-1,6,10,11,13,20

我知道错误是连接的,但我不太清楚该怎么做才能解决这个问题,任何帮助都表示赞赏!谢谢!

我的代码:

import java.util.Arrays;

public class Main {

    public static int smallest(int[] array) {
        int start = array[0];
        for (int i = 0; i < array.length; i++) {
            if (array[i] < start) {
                start = array[i];
            }
        }
        return start;
    }

    public static int indexOfTheSmallest(int[] array) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == smallest(array)) {
                return i;
            }
        }
        return 0;
    }

    public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
        int minIndex = index;
        for (int i = index; i < array.length; i++) {
            if (array[i] < array[minIndex]) {
                minIndex = i;
            }
        }
        return minIndex;
    }

    public static void swap(int[] array, int index1, int index2) {
        int hold = 0;
        for (int i = 0; i < array.length; i++) {
            hold = array[index1];
            array[index1] = array[index2];
            array[index2] = hold;
        }
    }

    public static void sort(int[] array) {
        System.out.println(Arrays.toString(array));
        for (int i = 0; i < array.length; i++) {
            swap(array, i, indexOfTheSmallestStartingFrom(array, i));
            System.out.println(Arrays.toString(array));
        }
    }

    public static void main(String[] args) {
        int[] values = {8, 5, 3, 7, 9, 6, 1, 2, 4};
        sort(values);
    }
}

3 个答案:

答案 0 :(得分:1)

这个算法的设计非常糟糕。最小的和indexOfSmallest都使用一个循环,这将在几何上降级。

交换不应该扫描整个数组,因为你只想交换两个元素,不是全部!

你有效地做了一个泡泡排序的打击版本,但是以一种非常复杂的方式有太多的循环。这将开始与任何体面的大小列表表现可怕。

可以找到更简单的版本here

答案 1 :(得分:0)

交换方法不需要循环。因为你只想更改两个元素一次而不是n次(如果n是偶数,则导致根本不更换它们。)

答案 2 :(得分:0)

        ZoneId zoneId = ZoneId.of("America/New_York");
        ZonedDateTime dateAndTimeForAccount = ZonedDateTime.ofInstant(now, zoneId);
        System.out.println(dateAndTimeForAccount);