-1

给定一个包含 0、1 和 2 的大小为 N 的数组 A;您需要按升序对数组进行排序。

输入: 第一行包含一个整数“T”,表示测试用例的总数。然后是 T 测试用例。每个测试用例包含两行输入。第一行表示数组 N 的大小。第二行包含由空格分隔的数组 A 的元素。

下面是java代码为什么最高元素不在数组的后端?

class GFG {
    public static void main (String[] args) {
        //code
        Scanner sc = new Scanner(System.in);
        int T =sc.nextInt();
        while(T>0)
        {
            int N= sc.nextInt();
            byte A[]=new byte[N];

            for(int i=0;i<N;i++){
                A[i]=sc.nextByte();
            }

            GFG g= new GFG();
            g.sortarray(A,N);

            for(int i=0;i<N;i++){
                System.out.print(A[i]+" ");
            }
            System.out.println();
            T--;
        }
        sc.close();
    }

    public static void sortarray(byte[] A,int n)
    {
       int low=0;
       int mid=0;
       int high=A.length-1;
       byte temp=0;

       for(int i=0;i<n;i++){
           if(A[i]==0){
               temp=A[low];
               A[low]=A[i];
               A[i]=temp;
               low++;
               mid++;
           }
           if(A[i]==2){ 
                temp=A[high];
                A[high]=A[i];
                A[i]=temp; 
                high--;
           }
           else{
            ++mid;
           }
       }
    }
} 

对于输入:

2
5
0 2 1 2 0
3
0 1 0

你的输出是:

0 0 2 2 1 
0 0 1
4

1 回答 1

0

尝试在 IDE 中逐步调试您的代码或在白板上跟踪您的代码。您的算法有误

于 2019-07-20T07:16:25.803 回答