C++ 使用双类型值实现快速排序
我必须创建一个程序,该程序接受未排序数字的输入文件,并使用快速排序输出另一个带有排序数字的文件。该程序在使用整数的多个测试用例下运行良好。但是,当我将数组格式从“int”更改为“double”时,我的程序无法正确排序值。最让我困惑的是它前后矛盾。例如,输入“5,4,3,2,2.1”工作正常,但输入“5,4,3,2.2,2.1”会导致seg故障。任何帮助都将不胜感激。谢谢C++ 使用双类型值实现快速排序,c++,sorting,quicksort,C++,Sorting,Quicksort,我必须创建一个程序,该程序接受未排序数字的输入文件,并使用快速排序输出另一个带有排序数字的文件。该程序在使用整数的多个测试用例下运行良好。但是,当我将数组格式从“int”更改为“double”时,我的程序无法正确排序值。最让我困惑的是它前后矛盾。例如,输入“5,4,3,2,2.1”工作正常,但输入“5,4,3,2.2,2.1”会导致seg故障。任何帮助都将不胜感激。谢谢 void swap(double *x, double *y) { double tmp; tmp = *x;
void swap(double *x, double *y)
{
double tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int pivot(int i, int j)
{
return ((i+j)/2);
}
void quickSort(double values[], int low, int high)
{
int start;
int end;
int k;
int p;
if (low < high)
{
p = pivot(low,high);
swap(&values[low],&values[p]);
k = values[low];
start = (low+1);
end = high;
while (start <= end)
{
while ((start <= high) && (values[start] <= k))
{
start++;
}
while ((end >= low) && (values[end] > k))
{
end--;
}
if (start < end)
{
swap(&values[start],&values[end]);
}
}
swap(&values[low],&values[end]);
quickSort(values,low,(end-1));
quickSort(values,(end+1),high);
}
}
int main()
{
...
quickSort(array, 0, (size+1);
...
return 0;
}
无效交换(双*x,双*y)
{
双tmp;
tmp=*x;
*x=*y;
*y=tmp;
}
整数轴(整数i,整数j)
{
返回((i+j)/2);
}
无效快速排序(双值[],整数低位,整数高位)
{
int启动;
内端;
int k;
INTP;
如果(低<高)
{
p=枢轴(低、高);
交换(&值[低],&值[p]);
k=数值[低];
开始=(低+1);
结束=高;
虽然(开始我认为k
在这里应该是一个双精度:)我认为k
在这里应该是一个双精度:)在快速排序方法开始时,您正在初始化几个可能需要双精度的值。特别是k和p。它还需要采用双精度的高低值作为参数
void quickSort(double values[], double low, double high)
{
int start;
int end;
double k;
double p;
...
快速检查数据类型可能会解决您的问题:)您在快速排序方法开始时初始化了几个可能需要双倍的值。特别是k和p。它还需要采用双倍的高值和低值作为参数
void quickSort(double values[], double low, double high)
{
int start;
int end;
double k;
double p;
...
对数据类型进行快速审核可能会解决您的问题:)这是作业吗(因为有标记)?向我们展示真实的代码-调用main()
中的quickSort()
不会编译。您为什么要做“size+1
”呢?这是作业吗(因为有一个标签)?给我们看真实的代码-调用main()
中的quickSort()
将无法编译。无论如何,为什么要执行“size+1
”?轴心值绝不能是双精度的。轴心值绝不能是双精度的。