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

时间:2018-02-02 13:27:18

标签: c++ arrays double bubble-sort

我正在尝试编写一个使用冒泡排序对数组进行排序的函数。我为整数数组写的版本似乎工作正常。但是double数组的版本什么都不做(它返回一个与输入数组完全相同的数组)。我对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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

正如其中一条评论指定的那样,您尚未初始化 bool fin ,这会导致UB

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

所以不要这样做。你做的那一刻,你的程序不再保证做你说的任何事情,可能是它在一个案例中而不是在另一个案件中工作的原因。