人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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;////という結果が得たいのです。

●質問者: kojiro_i619
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●200ポイント ベストアンサー

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

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]));
 }
 }
}

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
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ