我现在有一个(有点杂乱)冒泡排序的对象阵列的所谓的“排序”,代码如下万一添加破到冒泡排序阵列已经排序
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)时间复杂度。 – jumper0x08
有一个更一般的优化,你可以限制内循环到最后一次迭代进行交换的位置。 –