用java写希尔排序 但是总有小问题报错 自己无法解决了

问题相关代码


import java.util.Scanner;

public class xierlist {
    
    int arr[];
    
    
    public void shellSort(int arr[],int n) {
        
        int length = arr.length;
        
        int key = 0;
        
        
        int i = 0;
        
        for ( n = length / 2;n >= 1;n /= 2) {
            
            key = arr[n];
            int j = i - n;
            while (j >=0 && arr[j] > key) {
                arr[ j + n] = arr[j];
                j-=n;
            }
            arr[j+n]=key;
        }
        
        print_list(arr,n);
    }
    
    public void print_list(int arr[],int n) {
        
        
        for (int i = 0;i < n;i++) {
            
            System.out.println(arr[n]);
            
        }
    }
    
    
    public static void main(String args[]) {
        
        Scanner input = new Scanner(System.in);
        
        System.out.println("请输入一组数字");
        
        int[] arr = new int[10];
        
        for(int i = 0;i<arr.length;i++) {
            
            
            arr[i] = input.nextInt();
        }
         
        
        xierlist p = new xierlist();
        
        p.shellSort(arr,10);
        
        p.print_list(arr, 10);
        
        
    }

}

运行结果及报错内容

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at qifei.xierlist.print_list(xierlist.java:38)
at qifei.xierlist.main(xierlist.java:63)

我想要达到的结果

可以正常运行
最好的情况是 :可以帮我改进一下,使得 int[] arr = new int[10]; 里的10 可以用户自行输入

代码存在一个小问题

img


就是这里的n=10,arr[10]已经超出数据下标索引了哈!

如图第37行需要改正:

img

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!