0

私は、入力を配列に取り込むソートプログラムに取り組んでいます。すでに最小、最大、平均を作成しました。次に、中央値、最頻値、並べ替え(最大から最小、最小から最大)を実行する必要があります。

これが私がソートのために得たコードです[更新された新しいコード]

       RichTextBox1.Text = RichTextBox1.Text.Replace(" ", ",")


    marks = RichTextBox1.Text.Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries)
    Label3.Text = Nothing

    Dim z As Integer = marks.Length - 1
    Dim y As Integer
    Dim TEMP As Integer

    For X = 1 To z
        For y = 1 To (z - 1)

            If marks(y) > marks(y + 1) Then
                TEMP = marks(y)
                marks(y) = marks(y + 1)
                marks(y + 1) = TEMP

            End If
            Label3.Text = Label3.Text & vbCrLf & marks(y)
        Next y


    Next X
4

3 に答える 3

0

これは、 VB.netに変換されたウィキペディアの選択ソートアルゴリズムです。

Public Shared Function Sort(ByVal a As Int32()) As Int32()
    Dim n As Int32 = a.Length ' a(n-1) is the last element
    Dim i As Integer, j As Integer
    Dim iMin As Integer

    ' Advance the position through the entire array 
    ' we could do "from j = 0 to n-2" (that is "for j < n-1")
    ' because single element is also min element
    For j = 0 To n - 2
        ' Find the min element in the unsorted a[j .. n-1] 

        ' Assume the min is the first element 
        iMin = j
        ' Test against elements after j to find the smallest 
        For i = j + 1 To n - 1
            ' If this element is less, then it is the new minimum 
            If a(i) < a(iMin) Then
                ' Found new minimum, remember its index 
                iMin = i
            End If
        Next

        ' iMin is the index of the minimum element,
        ' swap it with the current position 
        If iMin <> j Then
            Dim tmp As Int32 = a(j)
            a(j) = a(iMin)
            a(iMin) = tmp
        End If
    Next

    Return a
End Function

上記を完全に理解すれば、それを逆にして降順の並べ替えを行うことは難しくありません。

于 2012-12-17T15:26:21.323 に答える
0

が気に入らない場合はSort、を使用できますOrderByMinLINQを使用すると、Maxを直接計算することもできるAverageため、車輪の再発明を行う必要はありません。詳細については、次の記事を参照してください。

LINQを使用した基本的な統計の計算

(Variance、StandardDeviation、Median、Modeなどのコードを含みます)

注:コードはC#ですが、どちらも.NET言語であるため、VB.NETに簡単に変換できます。

于 2012-12-17T15:52:56.383 に答える
0

多次元配列を並べ替えるには、1次元配列を並べ替える場合とまったく同じ手順を使用できます。

配列をループし、隣接する2つのメンバーの順序が間違っている場合は、それらを入れ替えます。

次のような多次元配列があるとします。

Dim Array(12, 4) String

したがって、たとえば、最後の列で配列を並べ替えるとします。

For index1 = 0 to Array.length - 1
For index2 = 0 to Array.length - 2
If Array(index2, 4) > Array(index2 + 1, 4) Then

// this sorts the last column

Temp4 = Array(index2, 4)
Array(index2, 4) = Array(index2 + 1, 4) 
Array(index2 + 1, 4) = Temp4

// and we repeat this swopping pattern for each of the other columns, so they are all sorted in  the same way

Temp3 = Array(index2, 3)
Array(index2, 3) = Array(index2 + 1, 3) 
Array(index2 + 1, 3) = Temp3

Temp2 = Array(index2, 2)
Array(index2, 2) = Array(index2 + 1, 2) 
Array(index2 + 1, 2) = Temp2

Temp1 = Array(index2, 1)
Array(index2, 1) = Array(index2 + 1, 1) 
Array(index2 + 1, 1) = Temp1

Temp0 = Array(index2, 0)
Array(index2, 0) = Array(index2 + 1, 0) 
Array(index2 + 1, 0) = Temp0

Next
Next

これで、すべての列が最後の列で並べ替えられます。

4つの列が文字列で、1つの列が数値である場合、どのようにソートできるのか疑問に思われるかもしれません。そして、数値の列でソートしたいとします。

あなたはこれを行うことができます

For index1 = 0 to Array.length - 1
For index2 = 0 to Array.length - 2
If CSng(Array(index2, 4)) > CSng(Array(index2 + 1, 4)) Then

// this sorts the last column

Temp4 = Array(index2, 4)
Array(index2, 4) = Array(index2 + 1, 4) 
Array(index2 + 1, 4) = Temp4

// and we repeat this swopping pattern for each of the other columns, so they are all sorted in the same way

Temp3 = Array(index2, 3)
Array(index2, 3) = Array(index2 + 1, 3) 
Array(index2 + 1, 3) = Temp3

Temp2 = Array(index2, 2)
Array(index2, 2) = Array(index2 + 1, 2) 
Array(index2 + 1, 2) = Temp2

Temp1 = Array(index2, 1)
Array(index2, 1) = Array(index2 + 1, 1) 
Array(index2 + 1, 1) = Temp1

Temp0 = Array(index2, 0)
Array(index2, 0) = Array(index2 + 1, 0) 
Array(index2 + 1, 0) = Temp0

Next
Next

私が行ったのは、データ型を文字列から単一の最後の列に変換してから、前と同じように隣接する値を比較することだけです。

したがって、これは多次元配列を並べ替える非常に基本的な方法であり、文字列と数値を含む混合配列でも機能します。

于 2014-04-23T22:22:07.363 に答える