Это не сработает:
int i;
cin >> i;
string arr[i];
Если вам нужно динамически изменить размер массива, используйте std :: vector (или new / delete, если вам действительно нужно).
int i;
cin >> i;
std::vector<std::string> arr(i);
С точки зрения причин сбоя сортировки вы сортируете числа в алфавитном порядке, что означает, что все, что имеет «1» в начале, появится первым. Вместо этого сортируйте по числовому значению:
auto compareStringsNumerically = [](const std::string& a, const std::string& b) {
return std::stoi(a) < std::stoi(b); //< compare integer values
};
std::sort(arr, arr + j, compareStringsNumerically);