2011-12-14 53 views
1

对我的快速排序有点麻烦 - 我试图通过它&但仍然做错了什么。任何有识之士将不胜感激。尝试在c分类结构中实现快速排序

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

谢谢!

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

想必你这样做你自己的熏陶,并不会因为你没有注意到标准库`qsort`? – dmckee 2011-12-14 01:47:20

+1

将来可能有助于说明您的代码存在什么问题,而不仅仅是说您遇到问题。 – Bashwork 2011-12-14 01:48:21

+0

我试图通过交换&但它不工作。我很抱歉没有做出更明确的表示。 – 2011-12-14 01:50:32

回答

2

更改此:

void swap(PointClassify &i, PointClassify &j) 

这样:

void swap(PointClassify *i, PointClassify *j) 

在C中,在声明中,*表示该变量是一个指针,它指向类型的东西。您使用&运算符来获取可变参数的地址。您可以在调用该函数时使用它,例如:

swap(&item[i], &item[j]); 
1

它是不是编译?

传递引用是一个C++特性。使用指针:

swap(PointClassify *i, PointClassify *j)