我正在尝试编写一个使用冒泡排序对数组进行排序的函数。我为整数数组写的版本似乎工作正常。但是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;
}
}
}
}
答案 0 :(得分:2)
正如其中一条评论指定的那样,您尚未初始化 bool fin ,这会导致UB。
简单来说,变量 fin 未初始化,读取未初始化的变量会导致未定义的行为。
所以不要这样做。你做的那一刻,你的程序不再保证做你说的任何事情,可能是它在一个案例中而不是在另一个案件中工作的原因。