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;////という結果が得たいのです。
やり方は色々ありますが、例えばこんな感じ。
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])); } } }
プログラミングに、誤りが、ありました。
2018/04/04 20:20:41VBで書くと
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