数组索引超出绑定合并排序

时间:2016-11-09 05:36:15

标签: java sorting merge

我正在研究合并排序算法但是我遇到了使这个伪代码正常工作的问题。我在第100行和第34行得到一个数组越界错误; s [k] = u [i];"

我不确定为什么这是错的。它基于pseduo代码。如果有人能指出我正确的方向,那将是非常令人沮丧的。

以下是算法:

enter image description here

enter image description here

以下是代码:

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);

}

1 个答案:

答案 0 :(得分:0)

在merge()之后,

之后
   s[k] = u[i];

缺少代码

   i++;

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