数値だけがデータになっている例はまれで、普通は他のデータが組み合わされています。
データが受験番号と点数の組み合わせであったとします。
n1001 65 67 56 70 42 300 n1002 35 39 38 32 34 178 n1003 55 80 40 72 59 306 n1004 52 86 61 75 61 335 n1005 63 72 65 53 59 312 n1006 44 50 52 50 47 243 n1007 45 57 59 45 35 241 ....
全体を動かして並べ替えるのは無駄。全体に番号を振りそれだけをデータと一緒にソートして一番大きいのはm番目、2番はn番目とこれを元に表示をする。
受験番号と点数のデータはどうせ全部よんで保持しなければならないので、全部を先に読んでしまいます。
int[][] tensuu というやり方もありますが、
jnum[] ten1[] ten2[] ten3[] ten4[] ten5[] data[] n1001 65 67 56 70 42 300 ....
とします。
この他にno[]を設けて、no[i]=i としておきます。
data[] を並べ替える時に。no[] も並べ替えます。
一番大きいデータがdata[3]で値が335だったとすればソート後、このデータはdata[0]に移動します。no[3]の元の内容は 3 で、これを一緒に並べ替えればno[0]が 3 になります。
これで一番大きいデータはdata[0]の335で、no[0]は 3 、その人のデータは、jnum[3] ten1[3] ten2[3] ten3[3] ten4[3] ten5[3] data[0] です。
最後のdata[]は並び替えられてしまっていますので注意。
読み込むデータ数より多い要素をもつように宣言します
int[] ten1 = new int[1200];
文字列の場合は
String[] jnum = new String[1200];
int ct=-1; //本来は0から始めたいが配列の指数が0から始まるので try { //String[] tmp = new String[7]; String[] tmp ; //要素数7で指定してもよいがなくても大丈夫 String sep = "\t"; FileReader in = new FileReader(fname); BufferedReader inb = new BufferedReader(in); String line; while ((line = inb.readLine()) != null) { tmp = line.split(sep); ct++; jnum[ct] = tmp[0]; ten1[ct] = Integer.parseInt(tmp[1]); ten2[ct] = Integer.parseInt(tmp[2]); ten3[ct] = Integer.parseInt(tmp[3]); ten4[ct] = Integer.parseInt(tmp[4]); ten5[ct] = Integer.parseInt(tmp[5]); data[ct] = Integer.parseInt(tmp[6]); no[ct] = ct; } inb.close(); in.close(); }//もちろんcatchも必要
次のようにしてもよい。
int ct=0; //本来は0から始めたいが配列の指数が0から始まるので try { //String[] tmp = new String[7]; String[] tmp ; //要素数7で指定してもよいがなくても大丈夫 String sep = "\t"; FileReader in = new FileReader(fname); BufferedReader inb = new BufferedReader(in); String line; while ((line = inb.readLine()) != null) { tmp = line.split(sep); jnum[ct] = tmp[0]; ten1[ct] = Integer.parseInt(tmp[1]); ten2[ct] = Integer.parseInt(tmp[2]); ten3[ct] = Integer.parseInt(tmp[3]); ten4[ct] = Integer.parseInt(tmp[4]); ten5[ct] = Integer.parseInt(tmp[5]); data[ct] = Integer.parseInt(tmp[6]); no[ct] = ct; ct++; } inb.close(); in.close(); }//もちろんcatchも必要
選択、バブル、挿入、なにを使ってもよいが、data[] と同様の並び替えを no[] に対しても行う。
つまりdata[a]とdata[x]を取り替えたらno[a]とno[x]も取り替える
最初の10件と最後の10件を表示する。(全部は見るのが苦しい)
n2026 75 94 84 88 96 437 n1121 68 92 100 90 82 432 n1632 71 82 96 89 94 432 n1453 61 93 96 90 91 431 n1301 81 86 92 92 78 429 n1297 68 86 100 89 82 425 n1457 66 94 100 91 73 424 n1127 73 82 100 80 88 423 n1327 75 93 92 74 89 423 n1490 62 97 92 86 85 422 n1795 72 87 96 91 76 422 n1169 36 18 33 28 20 135 n1177 45 29 12 26 23 135 n1260 15 30 40 24 26 135 n1380 23 27 33 28 24 135 n2063 32 17 45 18 21 133 n1293 29 12 44 29 18 132 n1819 23 37 36 17 18 131 n2017 53 14 25 19 15 126 n1914 42 15 25 20 22 124 n1956 29 11 25 16 37 118 n1808 17 24 29 21 18 109
上記のプログラムを完成させなさい