これらのインデックスを使用することによって元の配列が最大値に最小から選別取得するには、配列の(インデックス)をソートする方法

フセインはalbirouti:

例えば私はこの配列を持っています

int[] a = {6,10,16,11,7,12,3,9,8,5};

私はこのようなそのインデックスをソートしたいです

[6,9,0,4,8,7,1,3,5,2]

私は最大の値に小さいものから並べ替えにインデックスを使用できるようにします。私のコードで私の代わりにこれを得ました

[6, 9, 4, 8, 7, 4, 5, 6, 6, 6] 

これは私のコードです

int[] a = {6,10,16,11,7,12,3,9,8,5};
int[] indeks = indekssortering(a);
System.out.println(Arrays.toString(indeks));

public static int[] indekssortering(int[] a){
    int[] indeks = new int[a.length];
    int m = 0;
    boolean finnes = false;
    boolean nyVerdi = false;
    int n = 0;
    for (int j = 0; j < a.length; j++) {
        for (int i = m+1; i < a.length ; i++) {
            if(a[m] > a[i]){
                for (int k = 0; k < j; k++) {
                    if(indeks[k] == i) finnes = true; //check if the same position is saved before
                }
                if(!finnes){ // if not so its the next minimum value
                    m = i;
                } else {
                    nyVerdi = true; // if didnt find match then the value used to compare is the next minimum
                }
            }
            finnes = false;
        }
        indeks[j] = m;
        if(nyVerdi) n=n+1;
        nyVerdi = false;
        m=0+n;
    }
    return indeks;
}

私はこのコードを動作させるために、またはこれより良いアイデアを見つけるために助けが必要。

私は何をしようとしたことです。最初の値と全ての値を比較し、最小を取得し、アレイ(indeks)に位置を保存します。それ保存する前に、私はこの位置が前に追加されているかどうかを確認するためにループのために作られました。比較するのに使用される値を超えない値も大きいがあれば、それはその次に小さい値を意味します。私はそれらのいくつかは右だと他の人が間違っ。私はこのアイデアを変更し、よりよい解決策を見つける必要があると信じています。

マキシム:

ここでは、古典的なバブルソートアルゴリズムの実装では、ソートインデックスに変更します

あなたが探していることは、実際にソートする任意のソートアルゴリズムですint [] arrayこれは、すべてのインターネット上での実装の無限のリストです。そしてちょうどに比べ変更array[result[i]]にとスワップ値をresultしていないarrayitseft。

static int[] sort(int[] array) {
    final int size = array.length;

    final int[] result = new int[size];
    for (int i = 0; i < size; i++)
        result[i] = i;

    boolean sorted;
    do {
        sorted = true;
        int bubble = result[0];
        for (int i = 0; i < size - 1; i++) {
            if (array[bubble] > array[result[i + 1]]) {
                result[i] = result[i + 1];
                result[i + 1] = bubble;
                sorted = false;
            } else {
                bubble = result[i + 1];
            }
        }
    } while (!sorted);

    return result;
}

result arrays for your input data is [6, 9, 0, 4, 8, 7, 1, 3, 5, 2]

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=120191&siteId=1