2012-02-17 9 views
0

私は何とか答えを見つけることができなかったという素早く簡単な質問があります。オブジェクト配列の値をメソッドに渡す方法

私は整数配列をソートすることができるquick_srt_intというメソッドを持っていますが、私の問題はオブジェクトから形成された配列であり、特定のサブ値から配列をソートすることができますこれがどのように呼び出されるかについて)。

ちょっとした背景を述べると、これは配列の宣言方法です。

student[index] = new Person(name, id, age, gpa); 

id、age、およびgpaを異なる時間に並べ替えることができる必要がありますが、値を渡す方法はわかりません。私の推測では、私はそうそれを渡す必要があります:

これを正しく行う方法を教えてください。

gpaがダブルフォームであり、並べ替えのためにキャストできないため、ダブルタイプ値をサポートするためにクイックソート方法を変更する必要もあります。

ご協力いただきありがとうございます。ありがとうございます。

クイックソート方法はとてもようになります:あなたはComparatorを探している

public static void quick_srt_int(int array[], int low, int n) { 
    int lo = low; 
    int hi = n; 
    if (lo >= n) { 
     return; 
    } 
    int mid = array[(lo + hi)/2]; 
    while (lo < hi) { 
     while (lo < hi && array[lo] < mid) { 
      lo++; 
     } 
     while (lo < hi && array[hi] > mid) { 
      hi--; 
     } 
     if (lo < hi) { 
      int T = array[lo]; 
      array[lo] = array[hi]; 
      array[hi] = T; 
     } 
    } 
    if (hi < lo) { 
     int T = hi; 
     hi = lo; 
     lo = T; 
    } 
    quick_srt_int(array, low, lo); 
    quick_srt_int(array, lo == low ? lo + 1 : lo, n); 
} 

答えて

0

@Loganによると、Comparatorを使用する必要があります。そうでない場合は、PersonクラスでComparableインターフェイスを実装する必要があります。私はあなたの例をあげる:

public class Person implements Comparable { 
    private String name; 
    private int id; 
    private int age; 
    private int gpa; 

    public Person(String name, int id, int age, int gpa) { 
     this.name = name; 
     this.id = id; 
     this.age = age; 
     this.gpa = gpa; 
    } 
    //getters and setters here... 

    //logic for the comparison 
    //NOTE: you can improve the comparison algorithm. 
    public int compareTo (Person p) { 
     //0 means both Person objects are equal. 
     // > 0 means **this** object is greater than p object. 
     // < 0 means **this** object is less than p object. 
     int result = 0; 
     //comparison by id 
     if (this.id > p.id) { 
      result = 1; 
     } else { 
      if (this.id < p.id) { 
       result = -1; 
      } else { //same id, check by age 
       if (this.age > p.age) { 
        result = 1; 
       } else { 
        if (this.age < p.age) { 
         result = -1; 
        } else { //same id and age, check by gpa 
         if (this.gpa > p.gpa) { 
          result = 1; 
         } else { 
          if (this.gpa < p.gpa) { 
           result = -1; 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
    return result; 
} 

そして今、あなたのクイックソート方法に人の列を送信します。

public void ageSort() { 
    quick_srt_int(student[], 0, student[].age.length - 1); 
} 

public static void quick_srt_int(Person array[], int low, int n) { 
    //your logic... 
} 

あなたは、このために比較関数を指定したい場合は、あなたが追加する必要がありますパラメータをquick_srt_intに設定すると、Comparatorインターフェイスを実装するクラスを設定できます。

+0

ありがとうございます!私はそれを試みます。 :) –

0

。あなたの問題に非常によく似た例がありますhere

0

あなたの人のクラスは、比較可能なかコンパレータを実装する必要があります。 example sort by id

関連する問題