-1
私は配列を2つに分割するアルゴリズムを書く必要があります。左辺は奇数で、右辺は偶数でなければなりません。両側は昇順にソートする必要があります。私は一時配列または既存のAPIを使用することはできません。このアルゴリズムをより効率的に書くには
私は正常な方法を作ることができました。問題は100000の整数の配列であり、終了するまでに約15秒かかります。要件は0.1秒ですので、明らかに改善すべき点はたくさんあります。私は答えをスプーンフィードする人を探しているわけではなく、ちょうど正しい方向に微笑んでいます。私が書いた何かが悪いのか、それともなぜ私が知りたいのですが、私には何のコードも書かないでください!私がこれまで持って何
:
public static void delsortering(int[] a){
int oddnum = 0;
int n = a.length;
for(int k : a){ //finds how many odd numbers there are
if((k & 1) != 0) oddnum++;
}
for(int i = 0; i < n; i++){
if((a[i] & 1) != 0){ //finds odd numbers
for(int j = 0; j < n; j++){
if((a[j] & 1) == 0) //looks for even numbers to change pos with
switch(a, j, i);
}
}
}
for (int i = 0; i < n; i++){
int from = i < oddnum ? 0 : oddnum;
int to = i < oddnum ? oddnum - i: n - i + oddetall;
int m = maxValue(a, from, to); //finds max value in specified range
switch(a, m, to - 1); //puts said max value at specified index
}
}
は私が得ることができるすべての助けに感謝!
最初の部分については、odds/evens:Nested forループに分割するとn^2が得られます。 2つの索引が必要です。左から1つ、右から1つずつ移動します。インデックスが間違った番号を見ると、それは停止し、他のインデックスを歩かせます。両方が間違った番号を見た場合、スワップします。彼らが会うと終わった。 – Arkadiy
まず、配列-O(nlogn)を並べ替えることができます。この配列は別のO(n)で順番に分割する必要があります。 – Assafs
これはコードレビューのための質問ではありません。なぜなら、opは明らかに彼の既存コードの改善ではなくアルゴリズムを要求するからです。 – coder