簡體   English   中英

C ++遞歸字符串合並排序

[英]C++ recursive string mergesort

這是一個作業問題,因此,當我想要可用的代碼時,我真正要尋找的是對如何解決此問題的見解。 我有兩個升序排序的數組,需要將它們合並到一個遞歸函數中。 看來我需要建立合並排序算法的排序部分。 要求是遞歸函數只能將兩個排序的字符串作為參數,並且不能使用全局或靜態變量。

我認為偽代碼是:

  • 如果兩個字符串的大小== 0,則返回結果字符串。
  • 比較每個字符串的substr(0,1)以查看哪個較小,並將其附加到結果字符串
  • 以新參數遞歸調用函數,新參數是附加字符串的substr

我的問題是:如果不能使用靜態變量,如何保存結果字符串? 我已經看到了將字符串定義為=的代碼的遞歸調用的return語句。 在這種情況下行得通嗎?

第二個問題是如何增加功能。 我需要在第一次迭代后調用substr(1,size-1),然后在不使用靜態變量的情況下對其進行遞增。

這是我嘗試用靜態變量(不允許使用)求解方程式的方法:

static string result="";
static int vv=0;
static int ww=0;

if(v.size()==0 && w.size()==0)
    return result;
if(w.size()==0 || v.substr(0,1) <= w.substr(0,1)){ 
    result+=v.substr(0,1);
    vv++;
    return spliceSortedStrings( v.substr(vv,v.size()-vv) , w); 
    }
else if(v.size()==0 || w.substr(0,1) > v.substr(0,1)){
    result+=w.substr(0,1);
    ww++;
    return spliceSortedStrings( v , w.substr(ww,w.size()-ww));
    }

如有任何指導,我將不勝感激。

這個怎么樣:

std::string merge(std::string a, std::string b) {
    if (a.size() == 0) return b;
    if (b.size() == 0) return a;

    if (a.back() < b.back()) {
        std::string m = merge(a, b.substr(0, b.size()-1));
        return m + b.back();
    }
    else {
        std::string m = merge(a.substr(0, a.size()-1), b);
        return m + a.back();
    }
}

正確性和終止性應該是顯而易見的,我認為它應該符合您的限制。 但是我不知道老師會用C ++提出這樣的任務,因為上面的代碼可能效率低下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM