我实施了一种排序算法,我无法弄清楚运行需要多长时间,最糟糕的是,最佳或平均情况。 我该如何处理?
此处有视觉表示: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;
}
答案 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)