如何确定此算法的运行时间?

时间:2017-07-08 13:46:33

标签: java algorithm sorting

我实施了一种排序算法,我无法弄清楚运行需要多长时间,最糟糕的是,最佳或平均情况。 我该如何处理?

此处有视觉表示:https://plus.google.com/117480037533147789168/posts/FpgbKsyNLSL

    public int[] shortingSort(int[]unsortedArray){ 
    int k = 1;
    for (int i = 0; i<Math.floor(unsortedArray.length/2); i++){ 

        while(k != unsortedArray.length-1-i){                    

                if(k!= i && unsortedArray[i]>unsortedArray[k]){
                    int sub = 0;
                    sub = unsortedArray[i];
                    unsortedArray[i] = unsortedArray[k];
                    unsortedArray[k] = sub;             
                }

                if(k!= unsortedArray.length-1-i &&
                        unsortedArray[unsortedArray.length-1-i] < unsortedArray[k]){

                    int sub = 0;
                    sub = unsortedArray[unsortedArray.length-1-i];
                    unsortedArray[unsortedArray.length-1-i] = unsortedArray[k];
                    unsortedArray[k] = sub;             
                }
                k++;
        }
        if(k == unsortedArray.length-1-i){
            k = 1 + i; 
        }
    }
return unsortedArray;
}

1 个答案:

答案 0 :(得分:0)

让我们将unsortedArray的长度标记为N 你的外环:

for (int i = 0; i<Math.floor(unsortedArray.length/2); i++)

运行N/2次,i未在循环内更改。
在你的内循环中:

while(k != unsortedArray.length-1-i)

k在循环内递增一次(k++),并且在循环结束后,它将在其后输入if语句(它将始终输入,因为它检查对于停止while循环的相同条件。它将k更新为i+1。这将是1, 2, 3, 4, 5, ..., N/2 这意味着内循环将在外循环的每次迭代中运行少一次。

给予SUM(N/2, N/2-1, N/2-2, ... , 1) = O((N/2)^2) = O(N^2)