Javaでは、正の異なる数のリストがあります。
各数値はハッシュセットのキーとして使用され、IntIntHashSet fs
以下cs
のコードでいくつかの条件値を取得するために使用されます。次に、条件(ifステートメント)を確認し、trueの場合は要素を交換します。
int[] list = // given list of positive different ints like [14, 2, 7, 19, 20, 3]
int l = list.length;
if (l > 1) {
int elI, elJ, fI, fJ, swap;
for (int i = 0; i < l; i++) {
boolean swapped = false;
for (int j = 1; j < l; j++) {
elI = list[j - 1];
elJ = list[j];
fI = fs.get(elI);
fJ = fs.get(elJ);
if (fI > fJ || (fI == fJ && cs.get(elI) > cs.get(elJ))) {
swap = list[j];
list[j] = list[j - 1];
list[j - 1] = swap;
swapped = true;
}
}
if (!swapped) break;
}
}
よくわかりませんが、バブルソートのように見えます。私は時間のかかるプログラムを書いていますが、この部分は可能な限り最適化する必要があります。
主な質問: QuickSortのような別のソートアプローチを使用する方が速いでしょうか?
2番目の質問:一時変数なしでxorswap
スワップメソッドを使用する方が速いでしょうか?
[編集]:何千もの数字を含む非常に長いリストがあるかもしれません。上記のものは例のために単純です。