需要家庭作业的帮助

时间:2012-03-15 04:01:31

标签: java sorting

这是赋值:编写一个方法,用2个维度对矩阵的元素进行排序。例如

sort({{1,4}{2,3}}) 

会返回一个矩阵

{{1,2}{3,4}}.

我不知道在我的代码中我做错了导致我得到的输出是3.0,3.0,4.0,4.0。

这是我到目前为止所有的帮助将不胜感激。

public static void main(String[] args) {
    double[][] array =  { {1, 4}, {2, 3} };
    double[][] new_array = sort(array);
    for(int i = 0; i < array.length; i++) {
        for(int j = 0; j < array.length; j++) {
            System.out.print(new_array[i][j] + " ");
        }
    }

}

public static double[][] sort(double[][] array) {
    double[] storage = new double[array.length];
    for(int i = 0; i < array.length; i++) {
        for(int j = 0; j < array.length; j++) {
            storage[i] = array[i][j];
        }
    }
    storage = bubSort(storage);
    for(int i = 0; i < array.length; i++) {
        for(int j = 0; j < array.length; j++) {
            array[i][j] = storage[i];
        }
    }
    return array;
}

public static double[] bubSort(double[] list) {
    boolean changed = true;
    double temp;
    do {
    changed = false;
    for (int j = 0; j < list.length -1; j++)
    if (list[j] > list[j + 1]) {
        temp = list[j];
        list[j] = list[j + 1];
        list[j + 1] = temp;
        changed = true;
    }
    } while (changed);
    return list;
}

}

2 个答案:

答案 0 :(得分:1)

您遇到的主要问题是如何将值从2d数组复制到1d数组中。实际上,您只将两个值复制到长度为2的数组中.2d数组的长度不是完整的m x n长度。

我将给出一个小提示如何从2d数组复制到1d数组,但是由你决定如何从1d数组复制回2d数组。另外,你将如何找到阵列的全长?

    double[] storage = new double[4];//You should calculate this value
    int k = 0;
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length; j++) {
            storage[k++] = array[i][j];
        }
    }

您的冒泡排序工作正常,但之后您正在复制错误的值。尝试在排序后打印阵列存储,您将看到它现在正确。

答案 1 :(得分:0)

您正在覆盖已将其设置为array [i]的存储阵列。因为它在for循环中,所以你设置storage [0] = array [0] [0]然后设置storage [0] = array [0] [1]。这使您只能获取阵列该维度中的最后一个数字。同样,当你正在阅读它们时,你会插入两次相同的数字。由于4和3是各自维度中的最后两个数字,因此表明您正在对数组进行排序。您需要一个for循环用于存储设置&lt; array.length并将值存储在其中。