【问题标题】:Sorting multidimensional array without sort method?没有排序方法对多维数组进行排序?
【发布时间】:2016-02-22 01:51:42
【问题描述】:

我的任务是创建一个 2D 数组(10×10),用随机数(从 10 到 99)填充它,以及其他任务。但是,如果不使用数组 sort() 方法,我很难按升序对该数组的每一行进行排序。

我的排序方法没有排序。相反,它从最左上角到右下角沿对角线打印值。我应该怎么做才能对数字进行排序?

这是我的代码:

public class Program3 
{
    public static void main(String args[])
    {
        int[][] arrayOne = new int[10][10];
        int[][] arrayTwo = new int[10][10];
        arrayTwo = fillArray(arrayOne);

        System.out.println("");

        looper(arrayTwo);

        System.out.println("");

        sorter(arrayTwo);


    }
    public static int randomRange(int min, int max)
    {
        // Where (int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
        return (int)(Math.random()* ((max - min) + 1) + min);
    }
    public static int[][] fillArray(int x[][])
    {
        for (int row = 0; row < x.length; row++)
        {
            for (int column = 0; column < x[row].length; column++)
            {
                x[row][column] = randomRange(10,99);
                System.out.print(x[row][column] + "\t");
            }
            System.out.println();
        }
        return x;
    }
    public static void looper(int y[][])
    {
        for (int row = 0; row < y.length; row++)
        {
            for (int column = 0; column < y[row].length; column++)
            {
                if (y[row][column]%2 == 0)
                {
                    y[row][column] = 2 * y[row][column];

                    if (y[row][column]%10 == 0)
                    {
                        y[row][column] = y[row][column]/10;

                    }
                }
                else if (y[row][column] == 59)
                {
                    y[row][column] = 99;
                }
                System.out.print(y[row][column] + "\t");
            }
            System.out.println();
        }
        //return y;
    }
    public static void sorter(int[][] z)
    {
        int temp = 0;
        int tempTwo = 0;
        int lowest; 
        int bravo = 0;
        int bravoBefore = -1;

        for (int alpha = 0; alpha < z.length; alpha++)
        {
            //System.out.println(alpha + "a");

            lowest = z[alpha][bravoBefore + 1];
            bravoBefore++;
            for (bravo = alpha + 1; bravo < z[alpha].length; bravo++)
            {
                //System.out.println(alpha + "b");
                temp = bravo;

                if((z[alpha][bravo]) < lowest)
                {

                    temp = bravo;
                    lowest = z[alpha][bravo];
                    //System.out.println(lowest + " " + temp);
                    //System.out.println(alpha + "c" + temp);
                    tempTwo = z[alpha][bravo];
                    z[alpha][bravo] = z[alpha][temp];
                    z[alpha][temp] = tempTwo;   
                    //System.out.println(alpha + "d" + temp);
                }

            }

            System.out.print(z[alpha][bravoBefore] + "\t");
        }
        /*
        for (int alpha = 0; alpha < z.length; alpha++)
        {
            for (int bravo = 0; bravo < z.length - 1; bravo++)
            {
                if(Integer.valueOf(z[alpha][bravo]) < Integer.valueOf(z[alpha - 1][bravo]))
                {
                    int[][] temp = z[alpha - 1][bravo];
                    z[alpha-1][bravo] = z[alpha][bravo];
                    z[alpha][bravo] = temp;
                }
            }
        }
         */
    }
}

【问题讨论】:

  • 有很多问题。一个大问题:鉴于temp 将始终等于bravoz[alpha][bravo] = z[alpha][temp]; 会做什么?如果要对整行中的数字进行排序,为什么你的内循环从alpha + 1 开始?这将跳过一堆数字。另外,您的分拣机应该打印任何东西吗?如果是这样,是什么?您遍历各行,每行只打印一个数字。
  • @ajb 我创建数组的目的是(例如)两个值,int a = 100 和 int b = 85,以及一个 temp。如果 a
  • 下一个数字在哪一行?您的外部循环遍历每一行。当内部循环开始时,您正在查看以前未查看过的新行。那么您不想从新行中的第一个元素开始吗?按照您的编写方式,当您查看z[5] 时,您首先查看的是z[5][5]。你的程序从不查看z[5][0]z[5][1]、...、z[5][4]

标签: java arrays sorting multidimensional-array


【解决方案1】:
for(int k = 0; k < arr.length; k++)
        {
            for(int p = 0; p < arr[k].length; p++)
            {
                least = arr[k][p];
                for(int i = k; i < arr.length; i++)
                {
                    if(i == k)
                        z = p + 1;
                    else
                        z = 0;
                    for(;z < arr[i].length; z++)
                    {
                        if(arr[i][z] <= small)
                        {
                            least = array[i][z];
                            row = i;
                            col = z;
                        }
                    }
                }
            arr[row][col] = arr[k][p];
            arr[k][p] = least;
            System.out.print(arr[k][p] + " ");
            }
            System.out.println();
        }

希望这段代码有所帮助。快乐编码

【讨论】:

  • least 是整数吗?
  • 是的,当 2d 数组中的值是 int 时,如果它是 int 的两倍,那么您在这里的选择至少是比较小的值
  • 你在哪里定义least,z,small,row,col.
  • 在第一个 for 循环之前?
  • 是的,java 的美妙之处在于你可以在你需要的特定实例中定义。Brandon 请阅读 java 的基础知识,看起来你是初学者。还有更多工作要做。继续编码。祝你好运
【解决方案2】:

让 x 是我们的未排序数组;

        int t1=0;
        int i1=0;
        int j1=0;
        int n=0;

        boolean f1=false;

        for(int i=0;i<x.length;i++){

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

                t1=x[i][j];



                for(int m=i;m<x.length;m++){


                    if(m==i)n=j+1;  

                    else n=0;   

                    for(;n<x[m].length;n++){

                        if(x[m][n]<=t1){

                            t1=x[m][n];
                            i1=m;
                            j1=n;
                            f1=true;
                        }                       

                    }


                }

                if(f1){ 
                    x[i1][j1]=x[i][j];
                    x[i][j]=t1;
                    f1=false;
                }
            }   


        }

//现在 x 已排序; “-”;

【讨论】:

    最近更新 更多