原本的代码的时间复杂度确实应该是O(n^2),但算法可以改进,使最佳情况时为O(n)。改进后的代码为:

public void bubbleSort(int arr[]) {
boolean didSwap;
for(int i = 0, len = arr.length; i < len - 1; i++) {
didSwap = false;
for(int j = 0; j < len - i - 1; j++) {
if(arr[j + 1] < arr[j]) {
swap(arr, j, j + 1);
didSwap = true;
}
}
if(didSwap == false)
return;
}
}
最好情况下的时间复杂度:如果元素本来就是有序的,那么一趟冒泡排序既可以完成排序工作,比较和移动元素的次数分别是n-1和0,因此最好情况的时间复杂度为O(n)。
最差情况的时间复杂度:如果数据元素本来就是逆序的,许哟啊进行n-1趟排序,所需比较和移动次数分别为n(n-1)/2和3n(n-1)/2。因此最坏情况子下的时间复杂度为O(n^2)。
稳定性:因为每次比较后如果两个相邻元素相等我们并不会将他们交换,所以冒泡不会改变相同元素的下标,所以冒泡排序是一个稳定的排序。
转自:https://www.cnblogs.com/melon-h/archive/2012/09/20/2694941.html
本文探讨了冒泡排序算法的原始实现及其时间复杂度O(n^2),并提出了一种改进方法,使得在最佳情况下时间复杂度降低到O(n)。通过引入一个标志位来检查是否进行了交换,如果一轮遍历中没有发生交换,则提前结束排序过程。这种优化适用于已部分排序的数据集,提高了算法效率。
3260

被折叠的 条评论
为什么被折叠?



