第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

迭代合并排序似乎不正確 - 產生有效的輸出

迭代合并排序似乎不正確 - 產生有效的輸出

BIG陽 2021-11-24 14:37:03
我知道迭代merge sort可以在網(wǎng)上找到,但是我創(chuàng)建的這個實現(xiàn)似乎與我在網(wǎng)上看到的例子大不相同。這是我所擁有的。我迭代地實現(xiàn)了這個,但認為它不正確,因為這不是recursive實現(xiàn)所遵循的。遞歸實現(xiàn)splits/sorts一半然后另一個然后合并。此實現(xiàn)對整個列表進行拆分/排序,然后將它們與stack.我的問題是,這是一個正確的迭代實現(xiàn)嗎?我想我應該使用 aqueue而不是 a stack。public static List<Integer> iterativeMergeSort(List<Integer> nums){    Stack<List<Integer>> stack = new Stack<List<Integer>>();    for (int num : nums) {        stack.push(new ArrayList<Integer>(Arrays.asList(num)));    }    while (stack.size() > 1) {        List<Integer> a = stack.pop();        List<Integer> b = stack.pop();        stack.push(merge(a,b));    }    return stack.pop();}public static List<Integer> merge(List<Integer> a, List<Integer> b) {    int i = 0;    int j = 0;    List<Integer> merged = new ArrayList<Integer>();    while (i < a.size() && j < b.size()) {        if (a.get(i) == b.get(j)) {            merged.add(a.get(i));            merged.add(b.get(j));            i++;            j++;        }        else if (a.get(i) < b.get(j)) {            merged.add(a.get(i));            i++;        }        else { //a.get(i) > b.get(j)            merged.add(b.get(j));            j++;        }    }    while (i < a.size()) {        merged.add(a.get(i));        i++;    }    while (j < b.size()) {        merged.add(b.get(j));        j++;    }    return merged;}
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

迭代歸并排序通常是自下而上的。與使用重復遞歸拆分數(shù)組不同,自底向上歸并排序跳過該步驟并將 n 個元素的數(shù)組視為大小為 1 的 n 次運行,并立即開始合并運行。自頂向下歸并排序只會拆分子運行,直到在執(zhí)行任何合并之前產生兩個大小為 1 的子運行為止,并且速度稍慢,這就是為什么大多數(shù)庫使用自下而上歸并排序的一些變體的原因。Wiki 文章包含用于自底向上歸并排序的偽代碼:

https://en.wikipedia.org/wiki/Merge_sort#Bottom-up_implementation

可以通過交換指針或引用而不是復制來避免復制回步驟。


查看完整回答
反對 回復 2021-11-24
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

這個實現(xiàn)對我來說是錯誤的。這更像是一個插入排序(https://en.wikipedia.org/wiki/Insertion_sort)。合并排序的想法是將數(shù)據(jù)分成 2 個接近偶數(shù)的組,但此實現(xiàn)并沒有這樣做。您的 'a' 基本上是先前排序的元素的列表,而 'b' 是要添加的下一個元素。

查看完整回答
反對 回復 2021-11-24
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號