为什么我的排序算法产生无限循环? C#

时间:2016-12-17 02:05:24

标签: c# sorting

好吧,我决定把它搞乱并创建一个非常基本的冒泡排序算法,我只用了几个小时,这只是我程序的第二次迭代,而且我现在已经烧坏了,我好像打了一堵墙。我有它的设计,它将根据它在每轮排序上进行的换位次数来生成和显示一个整数(因此我可以密切关注它并确保它向下趋势)并且它被卡在一个无限的循环,不断返回值'36'。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool sorted = false;
            int[] data = new int[100];
            data = GenerateData(data);

            while (sorted == false)
            {
                int count = Sort(data);
                if (count == 0)
                {
                    sorted = true;
                }
                else 
                {
                    Console.WriteLine("{0}", count);
                }
            }
        }

        public static int[] GenerateData(int[] data)
        {
            Random num = new Random();

            for (int x = 0; x < 100; x++)
            {
                data[x] = num.Next(0, 99);
            }
            return data;
        }

        public static int Sort (int[] data)
        {
            int TempA = 0;
            int TempB = 101;
            int count = 0;

            for (int x =0; x<100; x++)
            {
                TempA = data[x];

                if ((x + 1) < 100)
                {
                    TempB = data[(x + 1)];
                }

                else
                {
                    TempB = 101;
                }

                if ( TempA > TempB)
                {
                    data[x++] = TempA;
                    data[x] = TempB;
                    count++;
                }
            }
            return count;
        }        
    }
}

1 个答案:

答案 0 :(得分:1)

我认为这两行存在问题

data[x++] = TempA;
data[x] = TempB;

它应该是

data[x++] = TempA;
data[x--] = TempB;

或者

data[x+1] = TempA;
data[x] = TempB;

否则您的for循环将最终跳过元素。