嘿,我对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循环中,我解决了它如下:
最佳案例:在最好的情况下,排序永远不会被设置回false(通过if(..){..})所以它只会循环一次; 所以运行时是,如果我没错,2 * 2n * 1 = 4n =&gt; O(n)为最佳案例;
最坏情况:在最坏的情况下,每次循环开始时变量sorted都设置为false,据我所知,所以它需要另外的“n”比较,因此运行时应该是:n * 2n * 1 = 2n ^ 2 =&gt;为O(n ^ 2)
我真的不确定我对while(!sorted)的想法是否正确或运行时是否有意义(因为大的符号似乎很好,但我不确定精确的运行时间)
我真的希望我的问题可以解决,我期待收到你的来信。
已经
了答案 0 :(得分:2)
您对O(n)的最佳案例运行时的分析是正确的。干得好!
对于最坏的情况,你需要更精确一些。你是正确的,每次重置标志时你必须再次通过数组以使它比以前更加分类,所以你知道它将是次数的O(n)倍循环运行。您在分析中尚未完成的工作是讨论在所有内容最终排序之前该循环可以运行多少次。
关于冒泡排序你可以做的一个观察是,在第一次通过数组之后,最大元素保证在最后位置 - 你能解释一下原因吗?在第二次传球之后,第二大元素保证在倒数第二的位置 - 再次,你能解释为什么吗?根据这种模式,您能否说出为什么外环运行的次数最多为O(n)?