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