2016-04-26 10 views
0

次のコードはクイックソートクラスです。下に向かって、swapというメソッドがあります。このメソッドは配列を取り、その配列の2つの数値を入れ替えるものです。これはJavaで可能ですか?言い換えれば、このインスタンスで動作するswap(T []、int、int)の形式でメソッドを持つことが可能ですか?私の質問が意味をなさないことを願っている配列と配列の2つの整数インデックスをパラメータとして取るスワップメソッド

public class QuickSort { 

public static <T extends Comparable<T>> void sort(T[] table) { 
    quickSort(table, 0, table.length - 1); 
} 

private static <T extends Comparable<T>> void quickSort(T[] table, int first, int last) { 
    if (first < last) { 
     int pivIndex = partition(table, first, last); 
     quickSort(table, first, pivIndex - 1); 
     quickSort(table, pivIndex + 1, last); 
    } 
} 

private static <T extends Comparable<T>> int partition(T[] table, int first, int last) { 
    T pivot = table[first]; 
    int up = first; 
    int down = last; 
    do { 
     while ((up < last) && (pivot.compareTo(table[up]) >= 0)) { 
      up++; 
     } 
     while (pivot.compareTo(table[down]) < 0) { 
      down--; 
     } 
     if (up < down) { 
      swap(table, up, down); 
     } 
    } 

    while (up < down); 
    swap(table, first, down); 
    return down; 
} 
+1

はい、問題なく動作します。それを試しましたか? – markspace

+0

彼のインデントは悪いです。これは 'do while'ループです。 – markspace

答えて

0

Javaで配列は、あなたがそれを渡すときに、あなたが本当にメモリ内のアドレスを渡している、オブジェクトであるため、はい、あなたは、これを行うことができます。呼び出された関数はそれを操作でき、その変更はどこにでも反映されます。

Javaで行うことができないC++でできることを考えているかもしれません。これはswap(int x, int y)です。 javaのプリミティブデータ値はアドレスを持たないため(プログラマが利用できるアドレスではない)、アドレスを渡すことができないため、ローカルでは変更できません。

それは意味がありますか?

+0

はい、意味があります。したがって、配列インデックスのスワップメソッドは、スワッピングのプリミティブと同じ方法で一時変数を使用しますか?あるいは、スワップを直接行うことはできますか? – Teej

+0

一時的で、おそらく同じ配列ではない(スワッピング関数のローカルなだけの)配列を使用したいと思うでしょう。あるいは、ビット単位の排他的論理和演算( "b = a^b; a = a^b; b = a^b; –

関連する問題