c++ - 为什么我的冒泡排序不适用于 double 据类型?

标签 c++ arrays double bubble-sort

我正在尝试编写一个使用冒泡排序对数组进行排序的函数。我为整数数组编写的版本似乎工作正常。但是双数组的版本什么都不做(它返回一个与输入数组完全一样的数组)。一般来说,我对 C++ 和编码比较陌生。 这个很好用。

void swap(int *xp, double *yp)
{
    double temp = *xp;
    *xp = *yp;
    *yp = temp;
}
void bubblesort(int arr[],int size)
{
    bool fin;
    while(fin)
    {
        fin=false;
        for (int i=0;i<size-1;i++)
        {
            if (arr[i]>arr[i+1])
            {
                swap(&arr[i],&arr[i+1]);
                fin=true;
            }
        }
    }
}

但是这个功能好像不行

void swap(double *xp, double *yp)
{
    double temp = *xp;
    *xp = *yp;
    *yp = temp;
}
void bubblesort(double arr[],int size)
{
    bool fin;
    while(fin)
    {
        fin=false;
        for (int i=0;i<size-1;i++)
        {
            if (arr[i]>arr[i+1])
            {
                swap(&arr[i],&arr[i+1]);
                fin=true;
            }
        }
    }
}

最佳答案

正如其中一条评论所指出的,您还没有初始化 bool fin,这将导致 UB .

简单来说,变量 fin 未初始化,读取未初始化的变量会导致未定义的行为。

所以不要这样做。在您这样做的那一刻,您的程序就不再保证会执行您所说的任何事情,这可能是它在一种情况下有效而在另一种情况下无效的原因。

关于c++ - 为什么我的冒泡排序不适用于 double 据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48583708/

相关文章:

MySQL:数组比较

C++ char数组输入 - 解释

从函数返回时 C 数组发生变化

c++ - 某些测试的输入验证未按预期工作

java - Kotlin 。如何格式化末尾为零的十进制数?

c++ - 推力位移 vector

c++ - 指向类创建错误核心转储的指针

java - 二分查找--同一个数组中的 double 和整数

c++ - 为什么我不能在 C++ 中输入我的 std::vector

python - 提取并转换 boost::python::list 的列表元素