繁体   English   中英

无法在C中对2d结构数组进行排序

[英]Trouble Sorting a 2d struct Array in C

我有一个(150x150)2d结构数组,我想以行独立的方式进行排序。 因为它是一个结构,所以我不相信(如果我在这里错了,请更正我)我不能使用qsort()或至少不知道如何处理,因为我正在解析结构,而我正在比较的元素是违反qsort()的比较原型要求的双精度型。 无论如何,我想对

  struct my_struct {
    int x;
    int y;
    double d;
 };
void quicksort(struct my_struct* array,int start, int end)
{

struct my_struct key, Pivot;
int i,j,PivotPoint;
if(start< end)
{
    PivotPoint = (start+end)/2;
    theswap(&array[start], &array[PivotPoint]);
    key = array[start];
    i= start+1;
    j = end;
    while (i<=j)
    {
        while((i<=end) && (array[i].d <= key.d))
            ++i;
        while ((j>=start) && array[j].d> key.d) {
            --j;
            if (i<j) {
                theswap(&array[i], &array[j]);
            }
        }
    }
    theswap(&array[start], &array[j]);
    quicksort(array, start, j-1);
    quicksort(array, j+1, end);
    }
}
void theswap(struct my_struct *a, struct TourElement *b)
{
struct my_struct t;
t=*a; 
*a=*b;
*b=t;
}

在我的主要职能中,我有这样的事情:

 for (i=0;i<150;++i)
   {
   for (j=0;j<150;++j)
   { 
    My_array[i][j].x = somethingUseful;
    My_Array[i][j].y = somethingEquallyUseful;
    My_Array[i][j].d = CalcD(somethingUseful,somethingEquallyUseful);
    }
    qsort(My_Array[i],150,sizeof(my_struct),compare);
   }


       int compare(struct my_struct a , struct my_struct b)
     {
          return a.d -b.d;
     }

当我执行quicksort时,应用程序挂起,经进一步调查,quicksort函数中的数组中似乎没有任何元素。 (我在quicksort的开头添加了一个for循环printf来逐项列出结构的d值,但未打印任何内容)

有人可以在这里识别我在做什么错吗? 我没有编译错误。 并且“ D”的计算正确。

您可以使用std c qsort

 void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) ); 

比较功能是这样的:

 int my_struct_comp(const void *p1, const void *p2){ my_struct *mp1 = (my_Struct*)p1; my_struct *mp2 = (my_Struct*)p2; return mp1->d - mp2->d; } 

比你可以调用qsort(其中len是数组的长度)

 qsort(myarray, len, sizeof(my_struct), &my_struct_cmp); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM