我正在尝试冒泡排序。我想弄清楚如何确定特定算法的Big(o)。
public class BubbleSort {
public int[] bubblesort(int[] numbers){
int temp;
for(int i =0; i< numbers.length; i++){
for(int j = 1; j< numbers.length-i; j++){
if(numbers[j-1] > numbers[j]){
temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp;
}
}
}
return numbers;
}
public static void main(String args[]){
int[] n = new int[]{4,3,2,1};
long startTime = System.nanoTime();
System.out.println(Arrays.toString(new BubbleSort().bubblesort(n)));
long endTime = System.nanoTime();
System.out.println("bubblesort : " + (endTime - startTime));
}
}
优化的冒泡排序可以做到这一点:
compare & swap 4,3; compare & swap 4, 2; compare & swap 4, 1; start again
compare & swap 3, 2; compare & swap 3, 1; start again
compare & swap 2, 1; done
从Wiki我发现最坏的情况分析是O(n^2)
。他们如何得出结论,该算法的最坏情况分析是O(n^2)
。我希望以编程方式看到它们如何进行给定算法的最坏情况分析。
根据我的理解,该算法完全(n^2) operations
,有没有办法以编程方式获得结果?