Код, который вы хотите получить:
#include<vector>
#include<string>
#include<algorithm>
void f(std::vector<std::string> &v)
{
std::sort(std::begin(v), std::end(v));
}
Вектор содержит значения и знает, сколько элементов используется.
Строка имеет дело со всем, что связано со строками, включая длину и сортировку.
У сортировки есть фактический алгоритм (или несколько), чтобы сортировка была максимально эффективной, намного более эффективной, чем ваша пузырьковая сортировка.
Если вы хотите что-то еще, кроме сортировки по умолчанию, вы можете передать лямбду (или другую вызываемую функцию) в функцию сортировки. См. Примеры в cppreference для получения более подробной информации.
Так что на самом деле 1 строка кода с минимальным шансом на ошибки. Правильное использование C ++ может упростить решение тривиальных задач.