奇妙なソートでさえ、よりパーソナライズされたソーティングです。基本的なアイデアは、奇妙なシーケンスをある順序で、ある順序で均一に配置し、次に奇妙なシーケンスを別の順序で配置し、すべてが注文されるまである順序でシーケンスを配置することです。
例を挙げましょう、
ソートする配列
[6 2 4 1 5 9]
奇妙なシーケンスを初めて比較すると、奇数シーケンスは、6と2、4、1、5、9などのシーケンスさえもその近隣と比較されます。
[6 2 4 1 5 9]
交換後、それはなります
[2 6 1 4 5 9]
偶数の2番目の比較は6と1、5と5は
[2 6 1 4 5 9]
交換後、それはなります
[2 1 6 4 5 9]
3回目の旅行は奇数であり、2、6、5はそれぞれ隣接列と比較するために選択されます。
[2 1 6 4 5 9]
交換後
[1 2 4 6 5 9]
4番目の偶数シリーズ
[1 2 4 6 5 9]
1つの交換
[1 2 4 5 6 9]
Javaの実装:
static void oddevensort(int [] ary){//パリティソートブールフラグ= true; while(flag){boolean odd = false、偶数= false; for(int i = 0; i <ary.length -1; i + = 2){if(ary [i]> ary [i + 1]){ary [i] = ary [i + 1] + 0 *(ary [i + 1] = ary [i]); ODD = true; }} for(int i = 1; i <ary.length -1; i + = 2){if(ary [i]> ary [i + 1]){ary [i + 1] + 0 *(ary [i + 1] = ary [i]);偶数= true; }} flag =奇数||平; // falseの場合、それは奇妙なシーケンスであろうとさえも、条件を満たす比較がないことを意味します}}}上記のフラグ=奇数||平;それがまだ交換していることを示している真のものがあります。最終的に、フラグはすべてがfalseの場合にのみfalseです。
flag = odd && ven;に書き換えます。 falseがある場合、全体のループは完了しなくなります。バブルソートのように、最後の内側ループを減らすことができます。