Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的BubbleSort类没有正确计算迭代次数_C#_.net_Algorithm - Fatal编程技术网

C# 我的BubbleSort类没有正确计算迭代次数

C# 我的BubbleSort类没有正确计算迭代次数,c#,.net,algorithm,C#,.net,Algorithm,这是我的节目 static void Main(string[] args) { int[] arrayToSort = new int[] { 5,4,9}; BubbleSort bubbleSort = new BubbleSort(); int [] SortedArray = bubbleSort.SortArray(arrayToSort); foreach (int i

这是我的节目

static void Main(string[] args)
        {

            int[] arrayToSort = new int[] { 5,4,9};
            BubbleSort bubbleSort = new BubbleSort();
            int [] SortedArray = bubbleSort.SortArray(arrayToSort);
            foreach (int i in SortedArray)
                Console.Write(i.ToString() + "," );
            Console.WriteLine("Number of Iterations {0}",   
                               bubbleSort.IterationsCounter);
            Console.ReadLine();    

        }

 public class BubbleSort
    {
        public int IterationsCounter;
        public int[] SortArray(int[] arrayToSort)
        {
            for(int i = 0;i<arrayToSort.Length-1;i++)
            {
                if(arrayToSort[i]>arrayToSort[i+1])
                {
                    int temp=arrayToSort[i];
                    arrayToSort[i]=arrayToSort[i+1];
                    arrayToSort[i+1]=temp;
                    //IterationsCounter++;  Update:Moved this line out of if condition)
                    SortArray(arrayToSort);
                }
            IterationsCounter++; //Moved counter here:

            }
            return arrayToSort;
    }
这怎么可能是对的?我的意思是数组已排序,但肯定不止一次迭代。我原以为这会有O(N^2)的运行时间,但这里出了点问题。我不是在计算迭代次数吗

编辑:

4,5,9 Number of Iterations:1
好的,我意识到3项是不够的,根据建议,我将计数器移出if,如果现在我将输入更改为

 5,4,9,2,3,1,17
迭代次数更改为
78
。这更好(从这个意义上说,它应该是高的),但它还不够高。那么这意味着算法有O(logn)时间?我以为泡泡运动是O(n^2)


谢谢

放置迭代计数器++;在if循环之外计算迭代次数。
到目前为止,代码将只计算交换的数量,因为它仅在有交换时才递增。

您计算的是交换操作的数量,而不是迭代次数。冒泡排序的平均运行时间是O(n^2),这并不意味着每个冒泡排序都必须进行这么多的迭代。例如,如果对已排序的数组进行冒泡排序,并且如果在整个数组上传递后进行交换,则设置一个标志。如果没有进行交换,那么应该清楚的是阵列已经处于有序状态,因为不需要交换两个元素。在这种情况下,泡沫应该结束。它似乎比平均时间复杂度为O(n log n)的快速排序要快,因为在这种情况下,修改后的冒泡排序的性能为O(n)。但你必须考虑到一般情况。

为了让你不再进行冒泡排序,请尝试阵列中的10000个项目。我高度怀疑这不正确,如果是真的,那是非常不可能的,也是非常可怕的!我会设定一个断点并观察它。你没有计算迭代次数。您正在计算Swaps将计数器移出条件并移动到循环中,它将产生您期望的输出。我认为您尚未理解
O
的概念
O(n^2)
并不意味着算法对n=10使用100次运算
O(n^2)
意味着当您将输入数组的长度增加十倍时,算法使用(平均或最多)10*10倍的操作。一个算法在n=3时可能需要1000次运算,但仍然是
O(n)
。谢谢,这增加了计数器,但仍然不会产生O(n^2),仍然是O(logn)。。。。i、 e.4个项目不会产生16次迭代,5个项目不会产生25次迭代,因此它不会总是产生O(N^2)。它因您的输入而异。请尝试将按升序排序的数组排序为按降序排序的数组。例如,将4,3,2,1排序为升序。