这是我正在研究的练习题,我对答案的概括有一个大概,但想澄清一下。
在 以下 是 一个 排序 算法 对于 ñ 整数 在 一个 阵列。 在 步 1, 您 重复 通过 该 阵列, 和 相比 每 对 的 邻 整数 和 交换 每 对 如果 他们 是 在 该 错误 订购。 在 步 2, 您 重复 步 1 如 许多 时 如 必要 直到 那里 是 一个 迭代 哪里 没有 掉期交易 是 制作 (在 哪一个 案件 该 名单 是 分类 和 您 能够 停止)。
什么 是 该 最糟糕的情况 复杂 的 这个算法?
此算法的最佳案例复杂性是什么?
答案 0 :(得分:3)
这里介绍的算法基本上是bubble sort。
这里最糟糕的情况是O(n ^ 2)。
最好的案例复杂性是O(n)。
以下是解释:
这里最好的情况是"已经排序的数组"。所以你需要的是N次比较(确切地说是它的n-1)所以复杂度是O(n)。
最坏的情况是逆序数组。
为了更好地理解为什么它的O(n ^ 2),只考虑反向排序数组的第一个元素,它确实是一个最大元素,要使这个数组排序,你需要将该元素放到数组的最后一个索引。通过问题中解释的算法,在每次迭代时,它将最大元素一个索引朝向其实际位置(这里是最后一个索引),并且它需要O(n)比较来移动一个位置。因此O(n ^ 2)比较将其移动到实际位置。
答案 1 :(得分:0)
在最好的情况下,不需要交换,只需一次通过阵列就足够了。因此复杂性为O(n)
。
在最坏的情况下,数组的元素可能是相反的顺序。因此,第一次迭代需要(n-1)
次交换,下一次(n-2)
并执行...
因此,这将导致O(n^2)
复杂性。
答案 2 :(得分:0)
正如其他人所说,这是泡沫排序。但是如果你在比较方面衡量复杂性,你可以比big-O更容易精确。
在最好的情况下,您只需要比较n-1对来验证它们是否按正确的顺序排列。
在最坏的情况下,第一个元素是应该在最后位置的元素,因此需要n-1个传递,每个元素将该元素向列表的末尾再推进一个位置。每次通过都需要进行n-1次比较。总而言之,需要进行(n-1)^ 2次比较。