Сортировка вещественного массива с ошибкой C++

В коде после компиляции в отсортированном массиве стабильно вторым элементом выдает число -4.22017е+.... Массив вещественных чисел. Я не понимаю, как это исправить, уже и меняла значение всех переменных на флоат, дабл -- все равно. Заполнение массива:

cout << "Введите кол-во элементов: ";
cin >> n;
float* mass = new float[n];
mass[0] = (rand() % 101 - 50) / 10.0;
imax = mass[0];
dd = 0;
for (int i = 1; i < n; i++)
    mass[i] = (rand() % 101 - 50) / 10.0;

Вывод исходного массива:

cout << "Исходный массив: ";
for (int i = 0; i < n; i++)
{
    cout << mass[i] << " ";
    if (max < mass[i])
    {
        max = mass[i];
        imax = i;
    }
}   
cout << endl;

Вывод отсортированного:

    {
    for (int r = 0; r <= n - 1; r++)
    {
        if (abs(mass[r]) < abs(mass[r + 1]))
        {
            temp = mass[r];
            mass[r] = mass[r + 1];
            mass[r + 1] = temp;
        }
    }
    }
    cout << "Отсортированный массив: ";
    for (int i = 0; i < n; i++)
    {
        cout << mass[i] << " ";
    }

Помогите пожалуйста:(


Ответы (1 шт):

Автор решения: Harry

Как минимум по тем огрызкам, что вы предоставили (в данном случае полной реализации сортировки нет - самого опасного в смысле ошибок места) -

 for (int r = 0; r <= n - 1; r++)
 {
    if (abs(mass[r]) < abs(mass[r + 1]))
    ...

При r == n-1 вы обращаетесь в элементу массива mass[n], который находится за пределами вашего массива.

Все, как минимум - неопределенное поведение. Вам не повезло - краха программы не было...

P.S. Просто интересна ваша логика - почему вы не стали проверять свой алгоритм сортировки и начали менять float на double?...

→ Ссылка