[英]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.