考えられるのは、すべての値を最終配列の親インデックスに設定し、すべてのヌル値を削除することです。それが唯一のユニークな非ゼロ値をソートし、注意点としてはこのO(n)ソート方法はすでに存在しますか?
int x[] = {9,3,4,2,1,12,5};
sortList(x)
public static int[] sortList(int[] x){
int[] y = new int[15];
for (int i=0; i < x.length; i++){
int value = x[i];
y[value] = value;
}
return removeNull(y);
}
public static int[] removeNull(int[] array) {
return Arrays.stream(array).filter(i -> i != 0).toArray();
}
: はここにいくつかの単純な実装です。配列を通過するときにメソッドが実行しているのは次のとおりです。
配列 - > 9,3,4,2,1,5は - > 0,1,2,3,4,5に変換されます。 0,0,0,9,0,0そして次に - > 1,2,3,4,5,9 私がこの問題を解決するのであれば、この解決法は配列を3回ループし、記憶域としてyサイズを取ります。このソート方法はすでに存在しますか?
12には何が起こったのですか?元の配列を1回だけループするようです。コードは、xの最初のパスを実行して、y []の範囲とサイズを設定するために使用できる最小値と最大値を決定する必要があります。 Javaタグは、コードの基になっているように見えるので、追加することをお勧めします。このメソッドは、一意の値(x []の最小値から最大値までの範囲で0または1の値のインスタンス)での作業に限定されていることを除いて、ソートの計算に似ています。 – rcgldr
@rcgldrはい、私はすでに最小値と最大値を扱っていますが、アルゴリズムを少し複雑にするので、投稿しませんでした。これはうまくいかないと言っていますか?これは、すべての値が一意である場合、ソートを計算するよりも、多くのソート問題に対してより効率的な解決策にはなりませんか? – joshLor
@ joshLor:値が4.3872 * 10^342の場合、または値が文字列の場合はどうしますか?これは名前のソートアルゴリズムに値するために多く制限されています。 – Curd