0

私はバブルソートを使用して、C#で番号を最小から最大に並べ替えようとしていますが、これまでのところ何が問題になっていますか?

private void Order_Click(object sender, EventArgs e) {
  value1 = Convert.ToInt32(textBox1.Text);
  value2 = Convert.ToInt32(textBox2.Text);
  value3 = Convert.ToInt32(textBox3.Text);
  value4 = Convert.ToInt32(textBox4.Text);
  value5 = Convert.ToInt32(textBox5.Text);

  int[] myarray = { value1, value2, value3, value4, value5 };
  int n = 0;
  bool swapped = true;
  int j = 0;
  int tmp;
  while (swapped) {
    swapped = false;
    j++;
    for (int i = 0; i < n - j; i++)
    {
      if (myarray[i] > myarray[i + 1]) {
        tmp = myarray[i];
        myarray[i] = myarray[i + 1];
        myarray[i + 1] = tmp;
        swapped = true;
        order1.Text = Convert.ToString(myarray[0] + "," + 
                                       myarray[1] + "," + 
                                       myarray[2] + "," + 
                                       myarray[3] + "," + 
                                       myarray[4]);
       }
     }
   }
 }
4

3 に答える 3

1

あなたのコードで最初に間違っていることは次のとおりです。

for (int i = 0; i < n - j; i++)

チェックi < n - jにより、コントロールがループを通過することはありません。n を 0 に初期化し、j を 1 (j++ の後) に初期化したため、i は未満になり-1ません。したがって、ループは意図したとおりに機能しません。swapped を false に設定したため、コントロールは while ループから外れるため、並べ替えは行われません。

コードを次のように変更する必要があります。

  while (swapped)
            {
                swapped = false;
                for (int i = 0; i < myarray.Length - 1; i++)
                {
                    if (myarray[i] > myarray[i + 1])
                    {
                        int t = myarray[i];
                        myarray[i] = myarray[i + 1];
                        myarray[i + 1] = t;
                        swapped = true;
                        Console.WriteLine(Convert.ToString(myarray[0] + "," + myarray[1] + "," + myarray[2] + "," + myarray[3] + "," + myarray[4]));
                    }

                }

            }
于 2012-07-30T20:22:47.587 に答える
0

nおよびj 変数は不要のようです。nプログラムから出jて、for ループで次のようにします。

 for (int i = 0; i < (array1.Length - 1); i++)
于 2012-07-30T20:20:12.553 に答える
-2

バブルソート

using System;  

class AscendingBubbleSort 
{     
    public static void Main()
    {
        int i = 0,j = 0,t = 0;
        int []c=new int[20];
        for(i=0;i<20;i++)
        {
            Console.WriteLine("Enter Value p[{0}]:", i);
            c[i]=int.Parse(Console.ReadLine());
        }
        // Sorting: Bubble Sort
        for(i=0;i<20;i++)
        {
            for(j=i+1;j<20;j++)
            {
                if(c[i]>c[j])
                {
                    Console.WriteLine("c[{0}]={1}, c[{2}]={3}", i, c[i], j, c[j]);
                    t=c[i];
                    c[i]=c[j];
                    c[j]=t;
                }
            }
        }
        Console.WriteLine("Here comes the sorted array:");
        // Print the contents of the sorted array
        for(i=0;i<20;i++)
        {
            Console.WriteLine ("c[{0}]={1}", i, c[i]);
        }
    }
}

ソース

于 2012-07-30T20:15:36.547 に答える