【发布时间】:2018-02-02 13:27:17
【问题描述】:
我正在尝试编写一个使用冒泡排序对数组进行排序的函数。我为整数数组编写的版本似乎工作正常。但是双数组的版本什么都不做(它返回一个与输入数组完全相同的数组)。我对 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 = true;在进入 while 循环之前 .. -
你依赖 UB,
fin没有初始化。你的编译器应该已经发出警告(如果没有,提高警告级别) -
@Borgleader 谢谢,这似乎成功了。但是为什么在整数版本中没有引起问题。另外,您如何提高警告级别(我将 Codeblocks 与 mingw 一起使用)
-
@RaheebHassan 为什么在整数版本中没有引起问题 -- 只有在向最大的潜在客户演示您的程序时才会引起麻烦,你的程序崩溃了。这就是未定义行为的本质——任何事情都可能随时发生......
-
未定义的行为是未定义的。有时它确实有效,但你不能依赖它。
标签: c++ arrays double bubble-sort