自定义测试用例的插入排序没有输出

时间:2015-02-07 10:09:03

标签: java sorting

我有这个代码用于插入排序,它无法为测试用例提供输出。

 import java.io.*;
import java.util.*;

public class Solution {

    public static void insertionSortPart2(int[] ar)
    {       
           // Fill up the code for the required logic here
           // Manipulate the array as required
           // The code for Input/Output is already provided
        int n =ar.length;
        for(int i=1;i<n;i++)
            {int k= ar[i];

             int j=i-1;
             while(ar[j]>k && j>-1)
                 {
                 ar[j+1]=ar[j];
                 j--;
             }
             ar[j+1]=k;
             printArray(ar);

        }
    }  



    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
       int s = in.nextInt();
       int[] ar = new int[s];
       for(int i=0;i<s;i++){
            ar[i]=in.nextInt(); 
       }
       insertionSortPart2(ar);    

    }    
    private static void printArray(int[] ar) {
      for(int n: ar){
         System.out.print(n+" ");
      }
        System.out.println("");
   }
}

不返回输出的测试用例是 9 8 6 7 3 5 4 1 2

错误:线程&#34; main&#34;中的异常java.lang.ArrayIndexOutOfBoundsException:-1

我无法弄清楚为什么.. 它适用于1 4 3 5 6 2

1 个答案:

答案 0 :(得分:1)

问题在于你的while循环,这就是你可能会遇到异常while(ar[j]>k && j>-1)的行。您正尝试使用负索引(即-1)访问数组。当您尝试访问数组的下限或外部边界之外的元素时,会出现此异常。

  • 当i为1时,j为j=i-1
  • 为0
  • 您输入while循环,因为[1]&gt; a [0]即9> 8
  • 你做j--其中j的值变为-1
  • 你回到while(while(ar[j]>k && j>-1))尝试访问[j]即.. a [-1],因此你得到了ArrayOutOfBoudException。

您可能需要检查j&gt;在访问数组之前为-1,即在

中的while循环中反转条件
while(ar[j]>k && j>-1)

while(j>-1 && ar[j]>k)