いちばん失敗した人決定戦

使用ソフト VB.NET
配列に入っている値の大きい順にソートする
値は重複することもある。その場合は配列の値が若いほうを優先
具体的には ロト6にて、出現した番号が多い順番にソートしたい。
date_last_st() には出現回数
date_sort() には出現回数が多い番号が順番にいれる

date_last_st(1)=2
date_last_st(2)=5
date_last_st(3)=2

の場合
date_sort(1)は2
date_sort(2)は1
date_sort(3)は3
となるようにしたい

一応自分で考えたのですがもっと簡素にできたりはしないのでしょうか?

----------------
Do
For i = 1 To 43
If date_last_st(i) > date_max Then
date_max_no = i
date_max = date_last_st(i)
End If
Next

date_last_st(date_max_no) = 0

date_sort(c) = date_max_no
date_max = 0


c = c + 1

'1番~43番まですべて0か 判断
For i = 1 To 43
If date_last_st(i) = 0 Then
date_TF = True
Else
date_TF = False
Exit For
End If
Next

'1番~43番まですべて0なら無限ループを抜ける
If date_TF = True Then
Exit Do
End If

Loop

---------

A 回答 (2件)

Array.Sort メソッドを使ってはどうでしょうか?


Array.Sort で実装されているのは、クイックソートで、これは、安定ではない(元の順序を保存しない)ですが、単なる数値のデータの場合、同じ値の時に元の順序を保存することは意味がないように思います。
    • good
    • 0

抽出済みのものをゼロにしてしまうと、最初からゼロであったもの


との区別ができませんから、よくありません。ここでは-1を使って
みます。
また、外側のループは必ず43回まわると全部抽出できることが
わかっているので固定で書きます。


For c=1 To 43
  
  date_max = -1
  For i=1 to 43
    If date_last_st(i) > date_max Then
      date_max = date_last_st(i)
      date_max_no = i
    End If
  Next

  date_last_st(date_max_no) = -1
  date_sort(c) = date_max_no

Next
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!