为什么我的冒泡排序不适用于双精度数据类型?

Why doesn't my bubble sort work for double data type?

我正在尝试编写一个使用冒泡排序对数组进行排序的函数。我为整数数组编写的版本似乎工作正常。但是双数组的版本什么都不做(它 returns 一个与输入数组完全一样的数组)。一般来说,我对 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 未初始化,读取未初始化的变量会导致未定义的行为。

所以不要这样做。在你这样做的那一刻,你的程序就不再保证做你说的任何事情,这可能是它在一种情况下工作而不在另一种情况下工作的原因。