以编程方式确定给定算法的渐近运行时间?

时间:2014-09-28 17:23:51

标签: java algorithm sorting

我正在尝试冒泡排序。我想弄清楚如何确定特定算法的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,有没有办法以编程方式获得结果?

0 个答案:

没有答案