Да, это форма пузырьковой сортировки.
Я также хотел бы узнать ваше мнение о том, как это можно улучшить
У вас неопределенное поведение когда i = length() - 1
, потому что вы используете str[i + 1]
, поэтому исправление этого является первым улучшением, которое я бы предложил.
Вы также можете сделать меньше итераций и пропустить inOrder()
. Вы можете отслеживать, в порядке ли это, отмечая, сделали ли вы обмен или нет.
Пример:
std::string alphabetSoup(std::string str) {
bool swapped;
size_t ei = str.length();
do {
--ei; // you can decrease this each iteration since the last element will be in
// the correct place after each iteration
swapped = false;
for(size_t i = 0; i < ei; ++i) {
if(str[i + 1] < str[i]) {
std::swap(str[i], str[i + 1]);
swapped = true;
}
}
} while(swapped);
return str;
}