【发布时间】:2020-11-27 06:07:29
【问题描述】:
我是排序算法的新手,所以现在我或多或少只是在尝试学习基础知识。这是我用 C++ 编写的,用于对字符串进行排序并按字母顺序返回它的字符。我相当有信心这算作冒泡排序,但我想得到专家的确认:)。我也想听听您对如何进一步改进它的看法?
bool inOrder(std::string s){
for(int i = 0; i < s.length(); i++){
int thisLetterNum = s[i];
int nextLetterNum = s[i + 1];
if(thisLetterNum > nextLetterNum){
return false;
}
}
return true;
}
std::string alphabetSoup(std::string str) {
std::string &result = str;
while(!inOrder(result)){
for(int i = 0; i < str.length(); i++){
int thisLetterNum = str[i];
int nextLetterNum = str[i + 1];
if(thisLetterNum > nextLetterNum){
result[i] = nextLetterNum;
result[i + 1] = thisLetterNum;
}
}
}
return result;
}
谢谢!
【问题讨论】:
-
我也想听听您对如何进一步改进它的看法? -- 改进冒泡排序就像改进泥三明治一样。完全使用不同的排序,因为冒泡排序是最糟糕的排序之一。
-
顺便说一句,这一行:
int nextLetterNum = s[i + 1];是该for循环的最后一次迭代的越界访问。 -
保罗打败了我。出于同样的原因,您不会找到很多冒泡排序专家。没有人在介绍性计算机编程课程之外使用它。如果你已经获得了足够多的资格成为专家……嗯……哎哟。
-
我认为 Donald Knuth(或其中一位自吹自擂的 CS 家伙)表示它甚至不应该在学校教授。
-
如果可行,请进行代码审查:codereview.stackexchange.com
标签: c++ algorithm sorting bubble-sort