Java 自定义测试用例的插入排序没有输出
我有这段代码用于插入排序,它无法给出测试用例的输出Java 自定义测试用例的插入排序没有输出,java,sorting,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
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("");
}
}
import java.io.*;
导入java.util.*;
公共类解决方案{
公共静态无效插入端口2(int[]ar)
{
//在此处填写所需逻辑的代码
//根据需要操作数组
//已经提供了输入/输出代码
int n=ar长度;
对于(int i=1;ik&&j>-1)
{
ar[j+1]=ar[j];
j--;
}
ar[j+1]=k;
打印阵列(ar);
}
}
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int s=in.nextInt();
int[]ar=新的int[s];
for(int i=0;i问题在于while循环,这一行可能会出现异常while(ar[j]>k&&j>-1)
。您尝试使用负索引访问数组,即-1。当您尝试访问数组下限或外部边界之外的元素时,会出现此异常
- 当i为1时,j通过
j=i-1
- 进入while循环是因为[1]>a[0],即9>8
- 做j,其中j的值变成-1
- 您返回while(
while(ar[j]>k&&j>-1)
)尝试访问一个[j]ie..a[-1],因此您得到了双重异常的排列
在访问阵列之前,您可能需要检查j>-1,即从中反转while循环中的条件
while(ar[j]>k && j>-1)
到
while(ar[j]>k&&j>-1)
是我错过的一个主要的悬念
while(j>-1 && ar[j]>k)