Java 数组索引越界合并排序

Java 数组索引越界合并排序,java,sorting,merge,Java,Sorting,Merge,我正在研究一个合并排序算法,但在让这个伪代码正常工作时遇到了一些问题。我在第100行得到一个数组越界错误“s[k]=u[I];” 我不知道为什么这是错误的。它基于PSEDOO代码。如果有人能给我指出正确的方向,我将不胜感激 以下是算法: 代码如下: import java.util.Arrays; import java.util.Random; public class MergeSortAnalysis { private static int[] aux; public sta

我正在研究一个合并排序算法,但在让这个伪代码正常工作时遇到了一些问题。我在第100行得到一个数组越界错误“s[k]=u[I];”

我不知道为什么这是错误的。它基于PSEDOO代码。如果有人能给我指出正确的方向,我将不胜感激

以下是算法:

代码如下:

import java.util.Arrays;
import java.util.Random;


public class MergeSortAnalysis {
private static int[] aux;


public static void main(String[] args) {
    /**
     * Merge Sort CALL
     */
    System.out.println("_____________________\nMerge Sort\n");
    //random dta
    int data[] =new int[10];
    Random rand = new Random();
    for (int i=0; i<=9;i++) 
    {
        data[i] = rand.nextInt(50) + 1;
    }
    System.out.println("Data Input: ");
    System.out.println(Arrays.toString(data));
    printArray(data);

    System.out.println("Sorted: ");
    MergeSort(10,data);




    /**
     * Merge Sort 2 CALL
     */
    System.out.println("_____________________\nMerge Sort 2\n");
    //random input
    int input[] =new int[10];
    Random rand1 = new Random();
    System.out.println("Input Before Sort: ");
    for (int i=0; i<=9;i++) 
    {
        input[i] = rand1.nextInt(50) + 1;

    }
    printArray(input);

    MergeSortAnalysis.sort(input);
    System.out.println("After Sort: ");
    printArray(input);


}
/**
 * Print Array
 * 
 */
public static void printArray(int p[]) {
    System.out.println("Output");
    System.out.println(Arrays.toString(p));


}




/**
 * Merge Sort Code - does not work
 * 
 * 
 */
public static void MergeSort(int n,int s[]) {
    int h=n/2;
    int m=n-h;
     int[] u = new int[h];
     int[] j = new int[m];
     if(n>1)
     {
      for(int i=0; i<h; i++)
      {
       u[i] = s[i];
      }
      for(int i=0; i<m; i++)
      {
       j[i] = s[h+i];
      }
      MergeSort(h,u);
      MergeSort(m,j);
      merge(h,m,u,j,s);
     }

}

public static void merge(int h, int m, int u[], int v[],int s[]) {
     int i, j, k;
     i=j=k=0;
     while(i<h && j<m) 
     {  
      if(u[i]<v[j])
      {
       s[k] = u[i];
      }
      else
      {
       s[k]=v[j];
       j++;   
      }
      k++;
     }  
     if(i>=h)
     {
      for(int a=j; a<m; a++)
      {
       s[k] = v[a];
       k++;
      }
     }else
     {
      for( int a=i; a<h;a++)
      {
       s[k] = u[a];
       k++;
      } 
     }


    printArray(s);

}
导入java.util.array;
导入java.util.Random;
公共类合并分析{
专用静态int[]aux;
公共静态void main(字符串[]args){
/**
*合并排序调用
*/
System.out.println(“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n合并排序\n”);
//随机差热分析
整数数据[]=新整数[10];
Random rand=新的Random();
对于(int i=0;i在merge()中,在

代码丢失了

   i++;

可能还有其他问题,但这似乎是主要问题。

了解如何使用调试器。你提到这个问题了吗?我熟悉错误的含义。-调用超出数组设置长度界限的索引。但是离开伪代码后,我不知道为什么这不起作用。这是第三次编写这部分。如果y你认为你可以复制psuedo代码,让它完全像代码一样工作,你没有正确地思考。你需要考虑如何将它放入Java中。
   i++;