我需要僅使用一個其他隊列,最終數量的變量,並且只使用「isEmpty」,「enqueue」,「dequeue」對隊列進行排序。 我試過這樣做了一天,我只是沒有找到它。我在各地搜查,這種限制沒有問題,你認爲這可能嗎?排序int queqe的限制
回答
如果它在java中,這是一個正常的冒泡排序。
public void sort(Queue<Integer> q){
//save first num into copy
Queue<Integer> copy = new Queue<Integer>();
int length=0;
while(!q.isEmpty()){
copy.add(q.remove());
length ++;
}
int maxNum, temp;
while(!copy.isEmpty()){
maxNum=copy.remove();
temp=0;
copy.add(maxNum);
//search for the max number
for(int i=0; i<length-1; i++){
temp = copy.remove();
if(temp > maxNum) maxNum= temp;
copy.add(temp);
}
//delete it from copy and add it to q
for(int i=0; i<length; i++){
temp = copy.remove();
if(temp == max){
q.add(max);
break;
}
copy.add(temp);
}
length --;
}
}
它應該工作。 so,說明:
計數q並保存在副本中。 現在你可以通過複製來刺激它,知道它有多少值。 因此搜索最大數量,將其插入q並從中移除副本。 做完之後,減小長度,因爲 現在複製的元素少了一個元素並重復,直到長度== 0 並對q進行排序。
排序q並需要兩個隊列的算法如下所示: q中的foreach元素 將q插入副本時,找到它的最大值。 確保你以某種方式將q插入到沒有最大編號 的副本中,然後將其插入到新的排序隊列中。 完成之後,重新插入q並複製,直到最後q爲空 。
該算法的整點是我們使用 一個額外的隊列通過q刺激。 和另一個爲了保存結果,同時刺激。 因爲如果我們不會使用另一個隊列來刺激q 我們將無法知道何時停止刺激。
但是如果我們知道何時停止通過q的刺激(知道它的長度) 我們並不需要額外的隊列,所以我們只能使用另一個隊列。
我不認爲你甚至需要另一個隊列。給我 半小時,我會用 只給我們的隊列編程一個算法。
當您對數組進行排序時,使用我們目前擁有的排序算法的 類型,爲了排序它小於O(n^2),您必須使用O(n)的內存。 這與說你永遠不會使用最終數量的變量 如果你想要小於O(n^2)相同。 你希望它使用最終數量的變量,所以我自動假設你只需要一個簡單的O(n^2)算法。 我認爲你可以做合併排序。我明天去做吧。
首先,非常感謝! 其次,我敢肯定,有一種方法,就像你說的,當你甚至不需要另一個隊列時,但是我的呻吟聲是(而且現在很抱歉地說)算法效率低下,你認爲有沒有辦法做到這一點在小於O(n^2)? – tzach94
什麼是變量的最終數量?問題陳述缺失的是如何比較每個隊列的前端元素。是否有返回隊列中元素數量的大小函數?
對於2個隊列,可以實現自底向上合併排序,但每個隊列需要一些變量來跟蹤每個隊列中的邏輯邊界。邏輯邊界將每個隊列有效地分爲兩部分,即前(舊)部分和後(新)部分。這是一種時間複雜度爲O(n log(n))的排序。
調用A和B上所有元素的兩個隊列。如果沒有大小函數,則將A複製到B以生成元素數。
在A和B之間均勻分開元素(一個爲A,一個爲B,...)。
合併排序重複合併來自A和B的運行,交替A和B之間的合併運行輸出。在第一次傳遞時,合併大小爲1的運行形成大小爲2的運行,下一次大小爲2被合併以形成大小爲4的運行,依此類推,直到2次運行合併到單個隊列中的最後一次通過。
- 1. 置換程序中的int限制(C++)
- 2. 有限制排序整數
- 3. MySQL int()無限制
- 4. 限制排序的列在jQuery的
- 5. 的MongoDB組由(+排序和限制)
- 6. 按比較排序的低位限制
- 7. 數據庫列INT限制
- 8. NSFetchedResultController多種限制和排序
- 9. tableSorter限制(排序)一次一頁?
- 10. 如何優化排序和限制?
- 11. jQuery可排序,限制爲1項
- 12. 限制jQuery可排序列表
- 13. 流星排序和限制發佈
- 14. 貓鼬限制TOP 10沒有排序
- 15. 限制和排序knockout.js foreach項目
- 16. Scalable Express + Mongoose排序和限制分頁
- 17. 流星與限制發佈和排序
- 18. 通過mysql_query限制和排序
- 19. SQL加入排序和限制結果
- 20. 排列有限制
- 21. 與排除限制
- 22. C#排序依據INT LINQ
- 23. 排序數據串爲int
- 24. 排序2D int數組JAVA
- 25. 二進制搜索已排序的列表<int>
- 26. jQuery極限排序父錶行排序
- 27. 未定義的參考`無效排序::交換<int>(INT *,INT,INT)」
- 28. 實現快速排序來限制/不訪問其內容的列表排序
- 29. 排序LONGTEXT在Zend的framwork INT
- 30. 設置限制爲一個int值
重複的http://stackoverflow.com/questions/28822952/how-would-i-sort-a-queue-using-only-one-additional-queue –
@ dm1530 - 那'重複'不包括底部合併排序作爲潛在的答案。 – rcgldr