作者: ほげほげ
日時: 2005/10/5(18:40)
こんにちは。ほげほげと申します。
ソートを使った処理で悩んでいます。

2つの数値が入った配列を、値の小さい順に番号を割り当て
その番号が入った配列を得たいのです。
ただし、同じ数値があった場合には、平均値を割り当てます。

たとえば、
@a=(13, 18, 8, 9, 11, 20); 
@b=(15, 9, 9, 18, 25);
ならば、ソートすると
8, 9, 9, 9, 11, 13, 15,  18,  18, 20, 25
なので、
1, 3, 3, 3,  5,  6,  7, 8.5, 8.5, 10, 11
(9と18は複数あるので順番の平均値(2+3+4)/3=3と
(8+9)/2=8.5を割り当てる)

この順番から元の配列に値を対応させて2つの配列、
@A=(6, 8.5, 1, 3, 5, 10);
@B=(7, 3, 3, 8.5, 11);
を得たいのです。

単純な並び替えなら、シュウォーツ変換を使えそうな気がしたのですが、
同値があったときの処理で困ってしまいました。
平均値を得る関数&meanがあるとして、どのようなスクリプトを書けばよいでしょうか?

よろしくお願いします。