2011-07-22 17 views
3

私のクラスの宿題問題の整数配列の配列をソートする必要があります。私はほとんど毎回StackOverFlowErrorを取得するようです。私の配列はlist2 [10] [10]です。私のクイックソートは3つのメソッドに分かれています。 quickSort1(int、int)はmain関数で、パーティションは新しいパーティションを比較し、swapはlist2 [i]とlist2 [j]の整数配列を単純に入れ替えます。 compare2(int a、int b)メソッドは、list2 [a]がlist2 [b]より小さい場合は1を返します.bがaより小さい場合は1、等しい場合は100を返します。整数配列の配列を素早く並べ替える

私のクイックソートが正しく実装されているかどうかわかりませんが、私はスワップを認識し、正確に私が彼らの言うことを比較しています。私は、StackOverFlowErrorを取得すると、大部分が永久に繰り返されることがあります。

public static int partition(int low, int high) 
{ 
     int i = low, j = high; 
     int pivot = (low+high)/2; 
      System.out.println(i + " " + j + " " + pivot); 
     while (i <= j) { 
      while (compare(i, pivot) > 0) 
        i++; 
      while (compare(pivot, j) > 0) 
        j--; 
      if (i < j) { 
        swap(i,j); 
        i++; 
        j--; 
      } 
       if (i == pivot && i == j-1) 
       { 
        return i; 
       } 
       if (j == pivot && j-1 == i) 
       { 
        return i; 
       } 
     } 

     return i; 
} 

public static void quickSort1(int low, int high) { 
     System.out.println("Recursion: " + recursions); 
     int i = partition(low, high); 
     System.out.println(i); 
     if (low < i -1) 
     { 
      recursions++; 
      quickSort1(low, i -1); 
     } 
     if (i < high-1) 
     { 
      recursions++; 
      quickSort1(i, high); 
     } 


} 

public static void swap(int i, int j) 
{ 
    int[] temp = new int[n]; 

    for(int k = 0; k < n; k++) { 
    temp[k] = list2[i][k]; 
    } 
    for(int k = 0; k < n; k++) { 
    list2[i][k] = list2[j][k]; 
    } 
    for(int k = 0; k < n; k++) { 
    list2[j][k] = temp[k]; 
    } 

} 
+1

あなたはどのように...この配列をソートする必要があると言うとき?すべての要素をソート順に並べる必要がありますか?行メジャーまたは列メジャー?または、行(または列)だけをソートする必要はありますか? – Patrick87

+0

関数を呼び出すたびに何かを印刷してみましたか? – hugomg

+0

おそらくこれが役立ちます:http://www.vogella.com/articles/JavaAlgorithmsQuicksort/article.html – xagyg

答えて

1

私はこれらの線がループwhile(i <= j)内部に必要とは思わない:

if (i == pivot && i == j-1) 
{ 
    return i; 
} 
if (j == pivot && j-1 == i) 
{ 
    return i; 
} 

は、コードからそれらを削除してください。

0

import java.util.Arrays; import java.util.Scanner;

パブリッククラスりんご{

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter the number of the values"); 
    int num = input.nextInt(); 
    int a[] = new int [num]; 
    System.out.println("Enter the nambers now"); 
    for(int i=0; i<a.length; i++){ 
     a[i] = input.nextInt(); 
    } 
    Arrays.sort(a); 
int min =a[0]; 
System.out.println("The minmum value is "+min); 
int max= a[a.length-1]; 
System.out.println("The maxemum value is "+max); 
int d = max-min; 
System.out.println("the difrentc between the max and the min is "+ d); 

    System.out.println("The Arrays R \t"); 
    for(int g=0; g<=a.length;g++){ 
     int m = a[g]; 
     System.out.println(m); 
    } 







} 

    }