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
。
我的代码出了什么问题? 它缺少它应该显示的结果。任何帮助或见解将不胜感激。
答案 0 :(得分:-2)
以下是我能发现的错误:
当您输出结果时,在内部循环中,您需要以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] + " ");
}
}
在排序阶段与第二个循环相同:它必须以0
开头,原因是相同的
for(int j=0;j<x[i].length;j++)
i
开头(其中i
是外循环的索引)。在你的二维情况下,两个外环代表一维外壳的唯一外环,两个内环代表一维外壳的唯一内环。你的2个内部循环需要迭代行i
的所有剩余元素直到结束(列j
到最后一个),再加上所有其余行(从i+1
到最后一行的行,从0到最后的索引)。但是,您会将j
中的元素迭代到所有剩余的行中的所有元素,因此您会遗漏一些元素(位于0
和j-1
之间的列中行i
到最后一行。)