必要なのは、組み込みのJavaソーターを使用しないArrayListをソートする最も簡単な方法です。現在、ArrayListをArrayに変更し、ライナーの並べ替えコードを使用していますが、後でいくつかの要素を呼び出す必要があり、ArrayListsの方が簡単です。
9 に答える
匿名ソートを使用できます。
Collections.sort(<ArrayList name>, Comparator<T>() {
public int compare(T o1, T o2) {
.....
....
}
});
ここで、T はソートするタイプ (つまり、文字列、オブジェクト) であり、必要に応じて Comparator インターフェイスを実装するだけです。
と仮定してArrayList<String> a
...
最も簡単です(しかし、これはあなたが使用できないと言っていることだと思います):
Collections.sort(a);
次に簡単な(しかし無駄):
a = new ArrayList<String>(new TreeSet<String>(a));
「組み込みの並べ替え」が Collections.sort() を参照し、実装した並べ替えアルゴリズムに問題がないと仮定すると、並べ替えられた配列をArrayList
ArrayList list = new ArrayList(Arrays.asList(sortedArray));
get(int index)
あるいは、およびset(int index, E element)
メソッドを使用して、並べ替えアルゴリズムを書き直して、配列ではなくリスト (ArrayList など) で動作するようにすることもできます。
コマンドプロンプトを介して渡された引数の並べ替え。Arrays.sortを使用せずに
public class Sort {
public static void main(String args[])
{
for(int j = 0; j < args.length; j++)
{
for(int i = j + 1; i < args.length; i++)
{
if(args[i].compareTo(args[j]) < 0)
{
String t = args[j];
args[j] = args[i];
args[i] = t;
}
}
System.out.println(args[j]);
}
}
}
Array.sortを使用する
import java.util.*;
public class IntegerArray {
public static void main(String args[])
{
int[] num=new int[]{10, 15, 20, 25, 12, 14};
Arrays.sort(num);
System.out.println("Ascending order: ");
for (int i=0; i<num.length; i++)
System.out.print(num[i] + " ");
}
}
Comparator
Javaで確認してください。これを使用Collections.sort(..)
して独自の並べ替えを実装し、独自の並べ替えを使用して配列リストを並べ替えることができますComparator
arrayListの中央から要素を引き出すときに正しく覚えていれば、残りの要素は自動的に下に移動します。最小値を探してそれを引き出すループを実行する場合は、それをarrayListの最後に配置します。各パスでi--インデックス用。つまり、使用量が1つ少なくなります。したがって、10個の要素のリストで、10個の要素すべてを見て、最も低い要素を最後に追加します。次に、最初の9つを見て、最も低いものを取り出して、最後に追加します。次に、リストがソートされるまで、最初の8つというように続きます。
配列を自分でソートする場合、最も単純なアルゴリズムの 1 つはバブル ソートです。これは、配列を複数回通過させ、隣接する要素のペアを比較し、左の要素が右の要素よりも大きい場合はそれらを交換することで機能します。
これは宿題なので、あとはあなたに任せます。アルゴリズムを視覚化することから始めて、アルゴリズムが何回のパスを作成する必要があるか、および各パスをどこから開始する必要があるかを考えます。それからコーディングします。
また、配列要素のペアを比較する方法の問題を理解し、解決する必要があります。
- 要素がプリミティブ型のインスタンスである場合は、関係演算子を使用するだけです。
- 要素が参照型のインスタンスである場合は、
Comparable
またはComparator
インターフェイスを使用する必要があります。javadocs で調べてください。(そしてそれらを調べることはあなたの宿題の一部です...)
「単純な」クイックソートの実装を次に示します。
public Comparable<Object>[] quickSort(Comparable<Object>[] array) {
if (array.length <= 1) {
return array;
}
List<Comparable<Object>> less = new ArrayList<Comparable<Object>>();
List<Comparable<Object>> greater = new ArrayList<Comparable<Object>>();
Comparable<Object> pivot = array[array.length / 2];
for (int i = 0;i < array.length;i++) {
if (array[i].equals(pivot)) {
continue;
}
if (array[i].compareTo(pivot) <= 0) {
less.add(array[i]);
} else {
greater.add(array[i]);
}
}
List<Comparable<Object>> result = new ArrayList<Comparable<Object>>(array.length);
result.addAll(Arrays.asList(quickSort(less.toArray(new Comparable<Object>[less.size()]))));
result.add(pivot);
result.addAll(Arrays.asList(quickSort(greater.toArray(new Comparable<Object>[greater.size()]))));
return result.toArray(new Comparable<Object>[result.size()]);
}
結果を構築するための配列とリストを使用した最後の操作は、 を使用して拡張できますSystem.arraycopy
。