2016-11-09 6 views
-5

マージソートアルゴリズムで作業していますが、この疑似コードが正常に動作することに問題があります。 100行目の配列外の配列を取得しようとしています。[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

私はエラーが何を意味しているのかよく知っています。配列の設定された長さしかし、疑似コードを削除すると、なぜこれが機能しないのか分からなくなります。これはこの部分を書いている3回目です。 –

答えて

0

()、

s[k] = u[i]; 

コードは

i++; 

は、他の問題があるかもしれません不足しているが、これは主なもののようです。

関連する問題