2016-03-12 108 views
-2

我想用遞歸排序一個整數隊列。我很確定我明白這件事的邏輯。但是由於工作不正常,我一定錯過了我的代碼。它只適用於只有2個數字的簡單隊列,除此之外的任何東西都不起作用。誰能告訴我我錯過了什麼?提前致謝!如何使用遞歸在Java中對隊列進行排序?

public Queue<Integer> sort(Queue<Integer> queue) { 
    Queue<Integer> cloneQueue = new Queue<Integer>(queue); 
    //creating a copy of the original queue 

    if (cloneQueue.size()<=1){ 
     return q; 
     //base case 
    }else{ 
     Queue<Integer> part1 = new Queue<Integer>(); 
     Queue<Integer> part2 = new Queue<Integer>(); 

     splitQueues(cloneQueue,part1,part2); 
     //split the queue in half and put them in part1 and part2 

     sort(part1); 
     sort(part2); 
     //recursion calls 

     return mergeSortedQueues(div1,div2); 
    } 
} 
+0

請訪問[幫助]並閱讀[問]。 _「...它只是不起作用...」是不夠的,你必須更清楚地知道「不工作」時會發生什麼,以及你採取了哪些步驟來調試它。首先,介紹一下IDE調試器中的代碼。 99%的時間可以讓你找到代碼執行你不期望的事情。問題形式「這是我的代碼,請告訴我什麼是錯誤的」,沒有其他的東西在StackOverflow上被認爲是無關緊要的。 –

回答

0

更新 作爲@Jeffrey Bosboom指出,這是假設是一個合併排序。

它看起來當你排序part1和part2,你沒有保存結果。因此,將其更改爲:

part1 = sort(part1); 
    part2 = sort(part2); 

這就是爲什麼它只能在2號的隊列,因爲兩個半區的基本情況。

我假設你的mergeSortedQueues函數是正確的,但這裏沒有顯示,所以可能是另一個錯誤的來源。

+0

我很確定提問者試圖實現合併排序,而不是您在此給出的插入排序。 –

相關問題