在非递减顺序中排列元素的输出未按预期进行?

时间:2015-12-27 01:12:58

标签: java sorting

  

Chandu的女朋友喜欢以非递增顺序排序的数组。今天是她的生日。 Chandu想在她生日那天给她一些排序的数组。但该商店只有未分类的阵列。因此,Chandu购买了T unsorted数组,并试图对它们进行排序。但是,由于生日派对迟到,他没有太多时间手动对阵列进行排序。因此,他要求你编写一个程序,以非递增的顺序对T数组进行排序。帮助他,或者他的女朋友会杀了他。

输入:

第一行包含一个整数T,表示测试用例的数量。 每个测试用例的第一行包含一个整数N,表示数组的大小。 第二行包含N个空格分隔的整数,表示数组元素Ai。

输出:

对于每个测试用例,以非递增顺序打印已排序的数组。

约束:

1 <= T <= 100
1 <= N <= 105
0 <= Ai <= 109

MYApproach

我的第一种方法是使用简单的方法对解决方案进行编码。为此,我尝试使用BubbleSort算法。但是在最后一个TestCase中,我没有得到预期的输出。我使用冒泡排序对每个比较相邻元素的元素进行排序排序循环中的k的迭代。因此,最小的元素将在最后进行

  

任何人都可以指导我为什么?

以下是代码:

 public static void main(String args[] ) throws Exception 
 {
    Scanner sc=new Scanner(System.in);
     int T=sc.nextInt();//Take the int Input from user
     sc.nextLine(); //to move to nextLine after consuming token
     int NoOfElements=sc.nextInt();
     sc.nextLine();//to move to nextLine
     int x[]=new int[NoOfElements];
     for(int i=1;i<=T;i++)
     {
        for(int j=0;j<NoOfElements;j++)
        {
             x[j]=sc.nextInt();

        }
        sort(x);
     }

 }
 public static void sort(int p[])
 {

    for(int k=0;k<p.length-1;k++)
    {
        //bubble sort
        for(int i=0;i<p.length-k-1;i++)
        {
            if(p[i]<p[i+1])
            {
                //swap
                int temp=p[i];
                p[i]=p[i+1];
                p[i+1]=temp;

            }

        }
    }       
        for(int m=0;m<p.length;m++)
        {
            System.out.print(p[m]);
            System.out.print(" ");
        }
          System.out.println();



  }
 }

  Input
 2
 5
 2 5 2 4 3 
 5
 5 4 2 3 1

 My Code's Output
 5 4 3 2 2 
 5 5 4 3 2 //Why I am getting 5 here.I could not correct it.

 Expected Correct Output
 5 4 3 2 2
 5 4 3 2 1

1 个答案:

答案 0 :(得分:0)

您只读取一次元素数量。每个测试案例都没有一次。

下面我更新了你的代码,为每个测试用例读取NoOfElements一次,并在那里分配一个数组。

public static void main(String args[]) throws Exception {
    Scanner sc = new Scanner(System. in );
    int T = sc.nextInt(); //Take the int Input from user
    sc.nextLine(); //to move to nextLine after consuming token

    for (int i = 1; i <= T; i++) {
        int NoOfElements = sc.nextInt(); // THIS LINE MOVED INTO LOOP
        sc.nextLine();                   // THIS LINE MOVED INTO LOOP
        int x[] = new int[NoOfElements];
        for (int j = 0; j < NoOfElements; j++) {
            x[j] = sc.nextInt();

        }
        sort(x);
    }

 }