Сортировка вещественного массива с ошибкой 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 шт):
Как минимум по тем огрызкам, что вы предоставили (в данном случае полной реализации сортировки нет - самого опасного в смысле ошибок места) -
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?...