Почему мой алгоритм сортировки изменяет значения массива? - PullRequest
0 голосов
/ 18 февраля 2020

Это простой алгоритм пузырьковой сортировки, являющийся частью моей более крупной программы, предназначенный для сортировки массива значений типа double. Ранее я пытался сортировать те же значения с помощью сортировки слиянием, но я получил тот же результат. Я действительно не замечаю того, что мне не хватает. Может кто-нибудь, пожалуйста, укажите мне это заранее Спасибо!

#include<iostream>
#include<iomanip>

using namespace std;

int const POINTS = 5;
double dataPoints[POINTS] = { 0.1, 0.5, 0.6, 0.2, 0.8 };

void sort(double dataPoints[])
{
    int i, j, flag = 1;    
    int temp;             
    for (i = 1; (i <= POINTS) && flag; i++)
    {
        flag = 0;
        for (j = 0; j < (POINTS - 1); j++)
        {
            if (dataPoints[j + 1] > dataPoints[j])      
            {
                temp = dataPoints[j];             
                dataPoints[j] = dataPoints[j + 1];
                dataPoints[j + 1] = temp;
                flag = 1;              
            }
        }
    }

}

int main()
{

    sort(dataPoints);

    for (int i = 0; i < POINTS; i++)
    {
        cout << dataPoints[i] << " ";
    }

}
Output:

0.8 0 0 0 0  

Ответы [ 2 ]

5 голосов
/ 18 февраля 2020

Вы меняете double, с временным типом int.

Вместо этого используйте:

double temp;

или лучше auto:

const auto temp = dataPoints[j];             
dataPoints[j] = dataPoints[j + 1];
dataPoints[j + 1] = temp;

или даже лучше, используйте std::swap:

std::swap(dataPoints[j], dataPoints[j + 1]);

Если разрешено, вы можете даже использовать:

std::sort(std::begin(dataPoints), std::end(dataPoints), std::greater<>{});
3 голосов
/ 18 февраля 2020

изменить тип данных временной переменной на удвоение.

...