为什么我的2D数组在排序时只省略了一些元素,省略的元素也没有排序?

时间:2017-08-11 18:44:44

标签: java arrays sorting multidimensional-array

class Temp
{

    static void sort1(int x[][])           //sort 2d  array
    {
        int temp = 0;
        for(int i=0;i<x.length;i++)
        {
            for(int j=i;j<x[i].length;j++)
            {
                for(int k=i;k<x.length;k++)
                {
                    for(int l=j;l<x[k].length;l++)
                    {
                        if(x[i][j] > x[k][l])
                        {
                            temp = x[i][j];
                            x[i][j] = x[k][l];
                            x[k][l] = temp;
                        }                        
                    }
                }
            }
        }
        System.out.println(".....Sorted Array.....");
        for(int i=0;i<x.length;i++)
        {
            for(int j=i;j<x[i].length;j++)
            {
                System.out.print(x[i][j] + "  ");
            }
        }
    }


    public static void main(String... s)
    {
        sort1(new int[][] { 
            {12, 7, 65}, 
            {87, 1, 4, 5, 31}, 
            {9, 76} 
            });
    }
}

当我运行此程序时,它将输出为

1 4 5 7 12 31 65

我原以为

1 4 5 7 9 12 31 65 76 87

我的代码出了什么问题? 它缺少它应该显示的结果。任何帮助或见解将不胜感激。

1 个答案:

答案 0 :(得分:-2)

以下是我能发现的错误:

  1. 当您输出结果时,在内部循环中,您需要以0而不是i开头,因为您要处理数组的所有元素而不仅仅是它的一半主对角线

    for(int i=0;i<x.length;i++)
    {
        for(int j=0;j<x[i].length;j++)
        {
            System.out.print(x[i][j] + "  ");
        }
    }
    
  2. 在排序阶段与第二个循环相同:它必须以0开头,原因是相同的

    for(int j=0;j<x[i].length;j++)

  3. 排序存在问题。在一维情况下,您有两个循环,内部循环以i开头(其中i是外循环的索引)。在你的二维情况下,两个外环代表一维外壳的唯一外环,两个内环代表一维外壳的唯一内环。你的2个内部循环需要迭代行i的所有剩余元素直到结束(列j到最后一个),再加上所有其余行(从i+1到最后一行的行,从0到最后的索引)。但是,您会将j中的元素迭代到所有剩余的行中的所有元素,因此您会遗漏一些元素(位于0j-1之间的列中行i到最后一行。)