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
答案 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);
}
}