2017-09-28 6 views
1
public class Mergesort { 

    private int[] numbers; 
    private int[] helper; 
    private int number; 

    public void sort(int[] values) { 

     this.numbers = values; 

     number = values.length; 

     this.helper = new int[number]; 
     mergesort(0, number - 1); 
    } 

    private void mergesort(int low, int high) { 

     // check if low is smaller than high, if not then the array is sorted 
     if (low < high) { 

      // Get the index of the element which is in the middle 
      int middle = low + (high - low)/2; 

      // Sort the left side of the array 
      mergesort(low, middle); 

      // Sort the right side of the array 
      mergesort(middle + 1, high); 

      // Combine them both 
      merge(low, middle, high); 
     } 
    } 
} 

数字と文字の配列を並べ替えるためにこのコードを実装していますが、これは私が知る限り、このコードが終了するまでです番号のみをソートする。どのように私はそれをフレームとチャーマーの混合を並べ替えるには?マージソートで文字と数字の混合をソートする

+1

混在したものを並べ替えることはできません。何か共通点があります。あなたの質問にもっと詳しく教えてください。int配列とchar配列の両方を並べ替えるソートメソッドが必要ですか? – A4L

+0

上記の点を明確にするには、「a」または「1」の値が大きくなります。 – kabanus

+0

はい、それはまさに私が意味するものです。私はint型とchar型の両方の配列を並べ替えることができるメソッドを必要とします。選択またはマージソートのいずれかを使用します – Dave

答えて

0

の代わりにcharデータ型を使用できます。

各文字/数字の整数値は文字です。それを使用すると、それに応じてソートすることができます。これは適切かもしれないし、そうでないかもしれません。

独自の順序を定義する場合は、コンパレータインタフェース使用することができます

https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

をしかし、この方法を使用するように複雑になることがあります。

+0

は、2つの配列を定義し、それをリストに変換してソートすることは可能ですか? – Dave

+0

Javaのリストでは、1つのデータ型だけがこれを回避できるので、2つのデータ型を組み合わせたクラスを作ることができます。 * char *と* int *の両方の変数を持つ新しいクラスを作成することができます。 Javaでは、クラスの順序を決定する方法をクラスに提供しています。https://en.wikibooks.org/wiki/Java_Programming/Comparing_Objects - フィールドを結合したクラスを作成し、それらのオブジェクトをjavaリストに追加してから使用しますリストをソートして注文する(または自分でロールする)。 – goshdarngames

関連する問題