【发布时间】:2017-09-01 07:59:33
【问题描述】:
我目前有一个名为“sorted”的对象数组的冒泡排序(有点乱),代码如下
object storage = 0;
for (int i = 0; i < sorted.Length; i++)
{
for (int c = 0; c < sorted.Length - 1; c++)
{
if (sorted[c].ToString().CompareTo(sorted[c + 1].ToString()) > 0)
{
storage = sorted[c + 1];
sorted[c + 1] = sorted[c];
sorted[c] = storage;
}
}
return sorted;
问题是这个函数总是循环遍历数组,无论如何。假设地说,“排序”数组可能是一个大数组,并且恰好已经排序,在这种情况下,该函数仍会扫描数组并工作一段时间,我想防止这种情况发生。 所以问题是,如果数组已经排序,如何正确停止循环?
【问题讨论】:
-
没有内置函数来检查数组是否排序。在每种情况下,您都需要访问数组的每个元素。排序数组的最佳时间复杂度为 O(n)。
-
插入排序对你有用吗?对于已排序的数组,它的时间复杂度为 O(n)。
-
还有一个更通用的优化,可以将内循环限制在最后一次迭代做swap的位置。