我現在有一個(有點雜亂)冒泡排序的對象陣列的所謂的「排序」,代碼如下萬一添加破到冒泡排序陣列已經排序
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
有一個更一般的優化,你可以限制內循環到最後一次迭代進行交換的位置。 –