Javaで大きさの順にSortするとき、その順にあたる番号(要素?)の順を得たい。

int[] arr=new int[]{3,1,5,4,6,2};
Arrays.sort(arr);
Array.sortで、一発で、大きさ順になるようですが、
このとき、大きさの番号順を得た得たいのですが
int[] arr2=new int [7];
でarr2[1]=2;arr2[2]=6;arr2[3]=1;////という結果が得たいのです。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2018/04/04 20:21:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント200pt

やり方は色々ありますが、例えばこんな感じ。

class Test {
    public static void main (String[] args) {
        int[] arr=new int[]{3,1,5,4,6,2};

        // 元の順番を取っておく
        Map<Integer,Integer> seq = new HashMap<Integer,Integer>();
        for (int i = 0 ; i < arr.length ; ++i) {
            seq.put(Integer.valueOf(arr[i]), Integer.valueOf(i+1));
        }

        // 並べ替え
        Arrays.sort(arr);

        // 元の順番の配列
        int max = Arrays.stream(arr).max().getAsInt() + 1;
        int[] arr2 = new int[max];
        for (int i = 0 ; i < arr.length ; ++i) {
            arr2[arr[i]] = seq.get(Integer.valueOf(arr[i]));
        }
    }
}
id:kojiro_i619

プログラミングに、誤りが、ありました。
VBで書くと
dim i as integer,j as integer
dim q(20) as integer
dim a(20) as integer
dim k as integer,k2 as integer
for i=1 to 20
s(i)=x <- ここへ量を入れる
next
for i=1 to 20
a(i)=i
next
for i=1 to 19
for j=i+1 to 20
if s(i)<s(j) then
k=s(i):s(i)=s(j):s(j)=k '<-ここの記述がなかった。
k=a(i):a(i)=a(j):a(j)=k
end if
next
next
for i=1 to 20
msgbox(a(i))
next

2018/04/04 20:20:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません