順位付け

 投稿者:しばっち  投稿日:2013年 9月10日(火)20時52分32秒
  RANDOMIZE
LET N=10
LET RANGE=100
DIM A(N),L(RANGE),P(N)
FOR I=1 TO N
   LET A(I)=INT(RND*RANGE)+1
   LET L(A(I))=L(A(I))+1
NEXT I
FOR I=1 TO RANGE-1
   LET L(I+1)=L(I+1)+L(I)
NEXT I
FOR I=1 TO N
   PRINT USING "順位  ###":L(A(I));
   PRINT USING "  値= ####":A(I)
NEXT I
PRINT "     並べ替え"
FOR I=1 TO N
   LET P(L(A(I)))=A(I)
NEXT I
FOR I=1 TO N
   IF P(I)<>0 THEN
      PRINT USING "順位  ###":I;
      PRINT USING "  値= ####":P(I)
   END IF
NEXT I
END
 

Re: 順位付け

 投稿者:山中和義  投稿日:2013年 9月11日(水)09時55分19秒
  > No.3140[元記事へ]

しばっちさんへのお返事です。

同値がある場合、次のようになりました。

LET N=10
LET RANGE=100
DIM A(N),L(RANGE)
DATA 20,30,10,50,40,25,30,10,35,40
MAT READ A
FOR I=1 TO N
   LET L(A(I))=L(A(I))+1
NEXT I
FOR I=1 TO RANGE-1
   LET L(I+1)=L(I+1)+L(I)
NEXT I
FOR I=1 TO N
   PRINT USING "順位  ###":L(A(I));
   PRINT USING "  値= ####":A(I)
NEXT I
END


順位    3  値=   20
順位    6  値=   30
順位    2  値=   10
順位   10  値=   50
順位    9  値=   40
順位    4  値=   25
順位    6  値=   30
順位    2  値=   10
順位    7  値=   35
順位    9  値=   40

 

Re: 順位付け

 投稿者:しばっち  投稿日:2013年 9月11日(水)19時18分3秒
  > No.3141[元記事へ]

山中和義さんへのお返事です。

> 同値がある場合、次のようになりました。

おっしゃるとおり、このアルゴリズムは制約の多い方法です。
まず、データ値が数値である事。(文字データには使えない)
それから数値に小数点以下がないこと。(整数値であること)
その整数値に同値がないこと。(但し、これは順位のつけ方にもよると思う)
そして、その整数がある一定の範囲内に収まっていること。
(データ値の中に10億や100億いった飛び出た数値があると使えない)

しかしながら、これらの条件を満たすなら高速に順位が求められる
方法といえるのではないでしょうか
 

戻る