最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

對單詞列表實(shí)現(xiàn)合并排序 - 原始單詞附加回列表?

對單詞列表實(shí)現(xiàn)合并排序 - 原始單詞附加回列表?

千巷貓影 2024-01-28 16:55:07
我正在嘗試對 size 的字符串列表實(shí)現(xiàn)合并排序算法N,并且我已設(shè)法對其進(jìn)行排序,但由于某種原因,原始值被添加到排序列表的末尾。我對實(shí)現(xiàn)排序算法還很陌生(閱讀:非常新),所以如果有人讓我知道我是否錯(cuò)過了什么,我真的很感激。    public static void mergeSortWords(int n, List<String> words) {        if (n < 2) {            return;        }        int mid = n / 2; // Getting the mid-point of the array        List<String> l = new ArrayList<String>(mid); // Left side of array        List<String> r = new ArrayList<String>(n-mid); // Right side of array        for (int i = 0; i < mid; i++) {            l.add(i, words.get(i));        }        for (int j = mid; j < n; j++) {            r.add(j - mid, words.get(j));        }        mergeSortWords(mid, l); // recursively sort the left side        mergeSortWords(n-mid, r); // recursively sort the right side        mergeWords(n, words, l, r, mid, n-mid); // merge the sorted arrays back together    }    public static void mergeWords(int n, List<String> words, List<String> l, List<String> r, int left, int right) {        if (words.size() > n) {            return;        }        int i = 0, j = 0, k = 0;        while (i < left && j < right) {            if (l.get(i).compareToIgnoreCase(r.get(j)) < 0) { // comparing the strings alphabetically                words.add(k++, l.get(i++));            }            else {                words.add(k++, r.get(j++));            }        }        while (i < left) {            words.add(k++, l.get(i++));        }        while (j < right) {            words.add(k++, r.get(j++));        }    }我像這樣進(jìn)行單元測試:    @Test    public void mergeSortWordsTest() {        List<String> actual = new ArrayList<String>();        List<String> expected = new ArrayList<String>();        actual.add("hello");        actual.add("yo");        actual.add("hi");        actual.add("what");        actual.add("bottle");
查看完整描述

1 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

因?yàn)?code>words您傳遞給的列表mergeWords永遠(yuǎn)不會(huì)被清除。mergeWords只會(huì)將新元素添加到此列表中,而不關(guān)心它已經(jīng)包含的元素。只需做一個(gè)

words.clear();

在。。。之初mergeWords。

.set(int index, E element)或者,您可以使用而不是覆蓋現(xiàn)有元素.add()。但您需要確保列表的大小正確。

一些不相關(guān)的評論:

在函數(shù)調(diào)用中,您始終將列表的大小作為附加參數(shù)傳遞(nleftright)。這是多余的(您可以使用 獲取尺寸list.size())。任何多余的東西都很容易變得不一致(即,如果傳遞錯(cuò)誤的大小會(huì)發(fā)生什么?)。所以最好刪除這些參數(shù)。

當(dāng)您將元素添加到列表時(shí),您可以使用重載add(int index, E element)。這完全沒問題,但我認(rèn)為使用重載add(E element)更容易處理,因?yàn)槟恍枰櫾谀睦锾砑釉亍V剌d只會(huì)將新元素附加到列表的末尾。


查看完整回答
反對 回復(fù) 2024-01-28
  • 1 回答
  • 0 關(guān)注
  • 186 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)