微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

插入排序 - 为什么代码对某些值集正确运行,而对其他集抛出数组索引越界异常

如何解决插入排序 - 为什么代码对某些值集正确运行,而对其他集抛出数组索引越界异常

当第一个输入是数组中的最小值时,代码工作得很好,而对于所有其他情况,代码抛出 Arrayindexoutofboundsexception -1

测试输入1:6,8,7,11,9(适用于此输入)

测试输入2:10,9,12,1(线程“main”中的异常java.lang.Arrayindexoutofboundsexception:-1)

分享这可能是什么原因以及如何解决此问题。

//SortingMain.java
import java.util.Scanner;

public class SortingMain {

    public static void main(String[] args) {
        int data[] = new int[5];
        Scanner input = new Scanner(system.in);
        InsertionSort obj = new InsertionSort();
        System.out.println("Enter the numbers in array:");
        for(int i=0; i<5;i++) {
            data[i]=input.nextInt();
        }
        obj.insertionSort(data);
        System.out.println("Elements after sorting");
        for(int i=0; i<5;i++) {
            System.out.println(data[i] + ",");
        }
        input.close();
    }
}
//InsertionSort.java
public class InsertionSort {
    public void insertionSort(int data[]) {
        int i,j,key;
        for(i=1;i<data.length;i++) {
            key=data[i];
            j=i;
            while(data[j-1]>key && j>=1) {
                data[j] = data[j-1];
                j--;
            }
            data[j] = key;
    }
}

解决方法

你的while循环中需要有这样的条件:while (j >= 1 && data[j - 1] > key) { ... } ie j >= 1 应该首先被检查,只有当它满足时,data[j-1] > key 才应该被检查。

这是因为首先要检查我要从data访问的索引是否有效,然后再访问它,否则会出现IndexOutOfBoundException

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。