我的快速排序有点麻烦 - 我试图通过它&但继续做错事。任何见解将不胜感激。
该代码正在实现我在网上找到的通用快速排序。从本质上讲,我试图复制它,但按结构的距离排序。因此,如果距离较小 - 我想移动这两个文件并对它们进行适当的排序。
谢谢!
typedef struct Tag
{
char classify;
float pointX;
float pointY;
float distance;
}PointClassify;
void swap(PointClassify &i, PointClassify &j)
{
PointClassify temp;
temp = i;
i = j;
j = temp;
}
void quickSort(PointClassify item[], int start, int end)
{
float pivot;
int i = start, j = end;
pivot = item[(start+end)/2].distance;
while(i <= j)
{
while(item[i].distance < pivot)
{
i = i+1;
}
while(item[j].distance > pivot)
{
j = j-1;
}
if(i <= j)
{
swap(item[i],item[j]);
i = i+1;
j = j-1;
}
}
fprintf(stderr, "This is the number %d \n", item[i].distance);
if(start < j)
{
quickSort(item, start, j);
}
if(i < end)
{
quickSort(item, i, end);
}
}
答案 0 :(得分:2)
改变这个:
void swap(PointClassify &i, PointClassify &j)
到此:
void swap(PointClassify *i, PointClassify *j)
在C中,在声明中,*表示该变量是指向该类型的指针。你使用&amp;运营商采取可变的地址。您可以在调用函数时使用它,例如:
swap(&item[i], &item[j]);
答案 1 :(得分:1)
不编译吗?
pass-by-reference是一个C ++特性。使用指针:
swap(PointClassify *i, PointClassify *j)