我想知道大O符号和这个代码 这是一个排序算法的大欧米茄符号 (最坏的情况下,最好的情况下),我的猜测是,它有一个O(n)
和Omega(n)
:对这个特定代码有什么大O符号?
public static void swap(int[] A, int i,int j){
int temp = 0;
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
public static int[] MyAlgorithm(int[] A, int n){
boolean done = true;
int j =0;
while(j<=(n-2)){
if(A[j]>A[j+1]){
swap(A,j,j+1);
done = false;
}
j = j+1;
}
j = n-1;
while(j>=1){
if(A[j]<A[j-1]){
swap(A, j-1,j);
done = false;
}
j = j-1;
}
if(done==false){
MyAlgorithm(A,n);
}
return A;
}
您将永远不会为排序算法实现O(n)。 – GriffeyDog
这是一个双向的气泡排序,所以它就像冒泡排序那样是'O(n²)'。 –
@GriffeyDog这只适用于基于比较的排序。其他算法可以增加空间复杂度以提高时间复杂度(例如基数排序)。 – chepner