我得到低於插入排序算法,它包括嵌套的for循環:嵌套循環運行時間複雜度分析
public InsertionSort(AnyType [] a){
int m;
for(int n = 1; n < a.length; n++){
AnyType temp = a[n];
for(m = n; m > 0 && tmp.compareTo(a[ m - 1]) <= 0; m--)
a[ m ] = a[ m - 1 ];
a[ m ] = temp;
}
}
第一環路已運行時間爲O(N),第二個是O(N^2 ),所以嵌套循環中的總運行時間應該是O(N * N^2 = N^3),對嗎?但是我知道在插入排序中最壞的情況應該是O(N^2),但是我的老師改變了這段代碼,通過替換[m-1])< = 0來代替使用一個[m - 1])< 0.所以我很困惑,我怎麼來計算比最壞的情況更糟糕的情況。有人幫忙嗎?提前致謝。
第二個循環看起來也'O(N)'對我來說,這將得到所需要的'O(N^2)'用於插入排序的整體性能。 –
但是,如果我嘗試對具有所有相同元素的數組進行排序,那麼比較和交換的次數都是1 + 2 + 3 + ... n-1次,直到排序結束,所以我得到n(n-1)/ 2 = O(n^2) – Student
這不是傳統的插入排序代碼,我的老師通過替換[m-1])<= 0而不是使用[m-1])<0 – Student