我很難理解爲什麼最好的插入排序在o(n)?爲什麼插入排序的最佳情況是O(n)&not O(n^2)?
for (int i = 0; i < size; i++) {
for (int j = i; j > 0; j--) {
int k = j-1;
if(a[j] < a[k]){
int temp = a[j];
a[j] = a[k];
a[k] = temp;
}
}
}
讓我們考慮一個例子初始陣列[1,2,3,4,5]尺寸= 5 第一環路會從i = 0到大小 - 1 和第二環路將去從i到1但讓我們假設,內for循環也從0變爲大小 - 1內的for循環也執行第(n-1)相似的外次循環 我同意將沒有互換但會有比較的,&它換句話說將完全等於未排序數組? 則n-1(外環)* N - 1(內循環)= N^2 - N + 1 = O(N^2)
任何一個可以解釋我在哪兒錯了?
沒有用於計算最佳案例複雜度的有用應用程序。話雖如此,當數組已被排序時,您的算法會浪費時間。每次'a [i + 1]> = a [i]'都可以跳過內部循環。 –
這是插入排序? –
@n.m。,你說最好的案例沒有應用,大概最好的案例或接近最佳案例的案例不會經常出現在隨機數據中,但是隨後你會繼續推薦代碼變化,這些變化只有在這些數據方面纔有意義。在某些情況下,人們的數據可能處於近似排序的順序,在這種情況下,運行時間將比O(N^2)更接近O(N)。 – Richard