2016-03-23 5 views
0

私は5ワードの配列をアルファベット順に並べようとしています。私は多分混乱しています。だから誰かが私に何が起こっているのか、どのようにコードを修正すれば大いに感謝するのかを説明できれば。ここで文字列を使った選択ソートプログラムの問題点は何ですか?

はコードです:

パブリック・クラスのForm1

Dim List() As String = {"bravo", "charlie", "zulu", "alpha", "whiskey"} 
Dim swap, value As Integer 
Dim i As Integer 
Dim sw As String 
Dim j, sp, x As Integer 
Dim temp(0) As String 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Label1.Text = Nothing 

    For i = 0 To List.Length - 1 
     sw = List(i) 
     sp = i 
     For x = sp To List.Length - 2 

     Next 
     If sw > List(x) Then 
      temp(0) = List(x) 
      List(x) = sw 
      sw = temp(0) 
     End If 
    Next 
    For j = 0 To List.Length - 1 
     Label1.Text &= List(j) & ", " 
    Next 
End Sub 

エンドクラス

+0

あなただけの 'List'自体をソートするために欠けていますか?もしリスト上で '.Sort'を呼び出すだけなら... – Codexer

+0

@Codexer - 宿題のように聞こえます。 – Enigmativity

+0

@Enigmativity必ずしも宿題ではない。しかし、明日は四半期が終わり、クラスでこれを理解することはできません。 –

答えて

0

あなたのコードの主な問題は、sw変数の使用です。問題は、割り当てsw = temp(0)を実行すると、swが指し示す参照が変更されますが、最初にswが割り当てられた元のList(i)は変更されません。一時的な変数を効果的に更新していて、元のリストは更新していません。私もList以外のクラスレベルの変数のすべてを排除した

For i = 0 To List.Length - 1 
    For x = i To List.Length - 1 
     If List(i) > List(x) Then 
      Dim temp = List(x) 
      List(x) = List(i) 
      List(i) = temp 
     End If 
    Next 
Next 

はここにあなたのコードがどのように見えるかです。彼らはすべて不必要だった。あなたが保持する必要があった唯一のものはtempStringではなく、String()ではありません)と私はButton1_Clickの方法で入れました。

私はあなたの元のリストにこのコードを実行すると、私はこれを取得:

 
alpha, bravo, charlie, whiskey, zulu 
0
  1. あなたの内側のループ(For x = sp To List.Length - 2)が空です。
  2. 内部ループ終了条件が正しくありません。なぜそれはList.Length - 2にループしていますか?
  3. 一時文字列を格納するために配列を使用する必要はありません。 Dim temp As Stringで十分です。
+0

内側のループは何ができますか?私はこれについて混乱しています。 –

+0

実際に何らかの作業をするために、そこに文を入れることができます。また、[選択ソートの仕組み](https://en.wikipedia.org/wiki/Selection_sort)も参照してください。 – jack3694078

+0

私のif文は正しい領域にあり、選択ソートには使えますか? –

関連する問題