我最近剛剛通過一些基本的排序算法對AP進行了一次簡單的介紹。我有點困惑,但它如何與遞歸一起工作,當我去其他堆棧溢出的答案時,我不太確定他們如何得到他們的遞歸函數的每個級別的n的倍數,並將它們添加到他們的最終答案。遞歸的大O
我想在這個類中找到node.nodeSortTest(int [] someArray)的Big-O符號。 我將如何得到答案,它會是什麼?
public class node{
public int value;
public node higher = null;
public node lower = null;
//Making it a public static object was just easier for the test
public static int addIndex = 0;
public node(int i){
value = i;
}
public void addToNode(int i){
if(i>=value)
if(higher != null) higher.addToNode(i);
else higher = new node(i);
else
if(lower != null) lower.addToNode(i);
else lower = new node(i);
}
public static void nodeSortTest(int[] nums){
if(nums.length<2)
return;
node keyNode = new node(nums[0]);
for(int i = 1; i < nums.length; i++)
keyNode.addToNode(nums[i]);
node.addIndex = 0;
keyNode.addTo(nums);
}
public void addTo(int[] nums){
if(lower != null) lower.addTo(nums);
nums[addIndex] = value;
addIndex++;
if(higher != null) higher.addTo(nums);
}
}
我猜這個最好的情況下,複雜度爲O(N log2n)。看起來您正在將節點存儲在二叉樹中。對於每個節點,將其插入二叉樹中,並且這將是log2n遍歷。我不確定我完全理解addTo的作用(將排序後的節點的位置存儲在nums數組中?),但看起來像O(log2n)這樣做,所以總體上它的O(n log2n)。 –
您的發佈對於Stack Overflow來說太「無用」了;這不是一個家庭作業或教程網站。你已經把你的作業問題交給我們,甚至沒有嘗試一個部分的解決方案;相反,儘可能地工作,然後提出一個阻止你的特定點。 – Prune
如果樹完全不平衡(例如,如果您以排序或反向排序數組開頭),最壞情況下可能爲O(n^2)。 –