- ベストアンサー
複数の数字の並び替えのプログラムの作例を教えてください
下記の各値を持つ配列 sj(5) を昇順、降順に並び換え、 配列sj(5) sj(1)=22 sj(2)= 9 sj(3)=18 sj(4)=10 sj(5)= 5 その昇順での順番を max(5) に max(1)=22 max(2)=18 max(3)=10 max(4)=9 max(5)=5 と出力。 その降順での順番を min(5) に min(1)= 5 min(2)= 9 min(3)=10 min(4)=18 min(5)=22 と出力。 この並び替えを[ for - next ]で効率よく書きたいのですがその作例をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub ソートボタン_Click() Dim 数字(5) As Integer Dim 最大(5) As Integer Dim 最小(5) As Integer Dim MaxIndex As Integer Dim MinIndex As Integer Dim I As Integer Dim 最大数字 As Integer 数字(1) = 22: 数字(2) = 9: 数字(3) = 18 数字(4) = 10: 数字(5) = 5 最大(0) = 99: MinIndex = 6 For MaxIndex = 1 To 5 最大数字 = 0 '最大値の抽出(一つ前より小さく、一番大きい数字) For I = 1 To 5 If 最大数字 < 数字(I) And _ 数字(I) < 最大(MaxIndex - 1) Then 最大数字 = 数字(I) End If Next 最大(MaxIndex) = 最大数字 '最大値の代入(1から) MinIndex = MinIndex - 1 最小(MinIndex) = Max1 '最小値の代入(5から) Next End Sub *あと、コンボボックスを使ってソートする方法とかもありますが…
その他の回答 (2)
Option Explicit Private Sub Command1_Click() Dim I As Integer Dim J As Integer Dim sj(5) As Integer Dim ao(5) As Integer ' Ascending order Dim do(5) As Integer ' descending order sj(1) = 22 sj(2) = 9 sj(3) = 18 sj(4) = 10 sj(5) = 5 For I = 1 To 4 For J = I + 1 To 5 Swap sj(I), sj(J) Next J ao(I) = sj(I) do(6 - I) = sj(I) Next I ao(5) = sj(5) do(1) = sj(5) End Sub Public Sub Swap(ByRef A As Integer, ByRef B As Integer) Dim D As Integer If A > B Then D = B B = A A = D End If End Sub
お礼
分りました。有難うございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Dim sj(5) As Integer Dim max(5) As Integer Dim min(5) As Integer Dim i As Integer Dim j As Integer Dim size As Integer Dim wk As Integer sj(1) = 22: sj(2) = 9: sj(3) = 18: sj(4) = 10: sj(5) = 5 size = UBound(sj) For i = 1 To size max(i) = sj(i) Next For i = 1 To size - 1 For j = i + 1 To size If max(i) < max(j) Then wk = max(j) max(j) = max(i) max(i) = wk End If Next Next For i = 1 To size min(size - i + 1) = max(i) Next
お礼
簡潔ですね。有難うございました。
お礼
分り易い解説で助かります。有難うございました。