-4

正しい結果が得られないソートコードは、エラーが発生していないときに指定されたリストを正しくソートしていません。確認してください。

  static void Main(string[] args)

        {

            List<int> a = new List<int>(new int[] { 3, 7, 6, 1, 8, 5 });

            int temp;

// foreach(int i in a)

for(int i=1; i<=a.Count; i++)

for(int j=0; j<a.Count-i; j++)

if (a[j] > a[j + 1])

{

temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp;

Console.WriteLine(a[j]);


}

Console.Read();

}
4

3 に答える 3

2

私はあなたのコードを理解できませんでした、そして私はC#を知りません。しかしとにかく、ここにバブルソートのソートロジックがあります(cで書かれています)。

//assuming there are n elements in the array a[]

    for(i=0; i<n; i++)
    {   for(j=1; j<n-i; j++)
        {   if(a[j] < a[j-1])
            {   temp = a[j];
                a[j] = a[j-1];
                a[j-1] = temp;
            }
        }
    }

また、 www.sorting-algorithms.com /bubble-sortを参照することもできます。

于 2012-04-06T08:01:59.057 に答える
0

あなたが投稿したのは、バブルソートアルゴリズムの実装ではありません。番号が交換されていないときにループするのを忘れました。これは、 JohnSkeetによって作成されたバブルソートの実装です。stillGoingチェックは、少なくとも実装に欠けているものです。

public void BubbleSort<T>(IList<T> list);
{
    BubbleSort<T>(list, Comparer<T>.Default);
}

public void BubbleSort<T>(IList<T> list, IComparer<T> comparer)
{
    bool stillGoing = true;
    while (stillGoing)
    {
        stillGoing = false;
        for (int i = 0; i < list.Length-1; i++)
        {
            T x = list[i];
            T y = list[i + 1];
            if (comparer.Compare(x, y) > 0)
            {
                list[i] = y;
                list[i + 1] = x;
                stillGoing = true;
            }
        }
    }
}
于 2012-04-06T07:46:06.183 に答える