[英]C++ recursive string mergesort
這是一個作業問題,因此,當我想要可用的代碼時,我真正要尋找的是對如何解決此問題的見解。 我有兩個升序排序的數組,需要將它們合並到一個遞歸函數中。 看來我需要建立合並排序算法的排序部分。 要求是遞歸函數只能將兩個排序的字符串作為參數,並且不能使用全局或靜態變量。
我認為偽代碼是:
我的問題是:如果不能使用靜態變量,如何保存結果字符串? 我已經看到了將字符串定義為=的代碼的遞歸調用的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.