试图在c - 排序结构中实现快速排序

时间:2011-12-14 01:44:47

标签: c unix sorting quicksort struct

我的快速排序有点麻烦 - 我试图通过它&但继续做错事。任何见解将不胜感激。

该代码正在实现我在网上找到的通用快速排序。从本质上讲,我试图复制它,但按结构的距离排序。因此,如果距离较小 - 我想移动这两个文件并对它们进行适当的排序。

谢谢!

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);
    }   
}

2 个答案:

答案 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)