Java 冒泡排序的复杂性
我在很多地方见过,气泡排序的复杂性是O(n2) 但这怎么可能,因为内部循环应该总是运行n-i次Java 冒泡排序的复杂性,java,algorithm,sorting,time-complexity,Java,Algorithm,Sorting,Time Complexity,我在很多地方见过,气泡排序的复杂性是O(n2) 但这怎么可能,因为内部循环应该总是运行n-i次 for (int i = 0; i < toSort.length -1; i++) { for (int j = 0; j < toSort.length - 1 - i; j++) { if(toSort[j] > toSort[j+1]){ int swap = toSort[j+1
for (int i = 0; i < toSort.length -1; i++) {
for (int j = 0; j < toSort.length - 1 - i; j++) {
if(toSort[j] > toSort[j+1]){
int swap = toSort[j+1];
toSort[j + 1] = toSort[j];
toSort[j] = swap;
}
}
}
for(int i=0;itoSort[j+1]){
int swap=toSort[j+1];
toSort[j+1]=toSort[j];
toSort[j]=交换;
}
}
}
那么n-i
的“平均”值是多少<代码>n/2
因此,它在O(n*n/2)
中运行,这被认为是O(n2)因为外循环运行n次,而对于每个迭代,内循环运行(n-i)次,操作总数可以计算为
n*(n-i)=O(n2) 有不同类型的时间复杂度-您使用的是大O表示法,这意味着此函数的所有情况都至少具有此时间复杂度
当它接近无穷大时,这基本上是n^2时间复杂度的最坏情况。时间复杂度并不是一门精确的艺术,但对于这类算法的速度来说,更像是一个大概的估计,因此,你试图做到太精确
例如,理论时间复杂度很可能是n^2,尽管理论上它应该是n*n-1,因为可能会执行任何不可预见的处理开销。它是O(n^2),因为长度*长度 但为什么我们不使用“/2”@DeepakKumar,因为当你处理规模时,它没有任何意义。大O表示法处理比例。你会认为O(n)与O(n-1)不同吗?即使n!=n-1它们具有相同的刻度。这同样适用于n/2
和n
。