对 Bubblesort 算法进行正确的运行时分析

Correct runtime analysis on a Bubblesort-algorithm

嘿,我对Bubblesort进行了运行时分析,我想问你是否有任何错误,因为我在某个时候不确定

这里是算法的摘录:

boolean sorted = false;
        while(!sorted)
        {
            int a = 0;
            int b = 1;
            sorted = true;
            while(a < sortArray.length  && b < sortArray.length)
            {
                if(sortArray[a].getWertigkeit() < sortArray[b].getWertigkeit())
                {
                    Karte tmp1 = sortArray[a];
                    Karte tmp2 = sortArray[b];
                    sortArray[a] = tmp2;
                    sortArray[b] = tmp1;
                    sorted = false;
                }

                a++;
                b++;
            }
        }

所以我得到的问题是在第一个while循环中,我解决了如下:

我真的不确定我对 while(!sorted) 的想法是否正确,或者运行时是否有意义(因为大 o 符号看起来不错,但我不确定精确的运行时)

我真的希望我的问题是相关的,我期待收到你的来信。

谢谢

您对 O(n) 的最佳情况 运行时间的分析是正确的。干得漂亮!

对于最坏的情况,你需要更精确一点。你是对的,每次重置标志时,你都必须再次遍历数组以使其比以前排序得更好,所以你知道它将是 O(n) 乘以循环次数 运行s。您在分析中还没有做的是讨论在所有内容最终排序之前循环可以 运行 多少次。

关于冒泡排序,您可以观察到在第一次遍历数组后,最大的元素肯定位于最后一个位置 - 您能解释一下原因吗?第二遍之后,第二大元素保证在倒数第二个位置——再一次,你能解释一下为什么吗?基于这种模式,你能争论为什么外层循环的次数运行s最多为O(n)吗?