2016-11-09 33 views
-5

我正在合并排序算法,但我有问题得到此伪代码正常工作。我在第100行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

你有没有提到这个问题http://stackoverflow.com/questions/18549869/array-index-out-of-bounds-exception-java –

+0

我很熟悉错误意味着什么.-呼吁索引超出界限数组的设定长度。但是为了避免伪代码,我失去了为什么这不起作用。这是第三次写这部分。 –

回答

0

在合并(),

s[k] = u[i]; 

代码丢失

i++; 

可能还有其他的问题,但是这似乎是主要原因之一。