gpt4 book ai didi

在数组的子集上调用 qsort

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:07 25 4
gpt4 key购买 nike

我一直在寻找一种方法来对 C 中的数组子集进行排序,而无需将元素移动到临时数组并将它们复制回来。我可能对 qsort 理解不好,但我认为下面的代码应该可以工作:

qsort(&my_struct_arr[1],3,sizeof(my_struct),my_struct_cmp);
//my_struct_arr is a 4 element array, where i want to sort from position 1 to 3
int my_struct_cmp(const void *a, const void *b)
{
my_struct A=*(my_struct*)a, B=*(my_struct*)b;
if(A.x-B.x < 0.01) return A.y-B.y;
return A.x-B.x;
}
typedef struct foo
{
float x, y;
} my_struct;

问题是,它不起作用。

更新 1:好的,我知道我对这个问题并不完全清楚。我将数组从位置 1 初始化到位置 3,所以我有一个包含如下元素的数组:

{ { ValueFromPreviousIteration.x,ValueFromPreviousIteration.y }, {x1,y1}, {x2,y2}, {x3,y3} }

我的问题是,像上面那样调用的 qsort 将对整个数组进行排序,而我只想对它的最后 3 个元素进行排序。

最佳答案

您的比较功能不稳定。它可以根据传递结构的顺序返回不同的结果。

考虑以下结构值:

my_struct m = { -3.021, 30 };
my_struct n = { 3.010, 0 };

int main(void)
{
int comp1 = my_struct_cmp( &m, &n);
int comp2 = my_struct_cmp( &n, &m);

printf( "%d %d\n", comp1, comp2);

return 0;
}

第一次比较表明m > n,而第二次比较表明n > m。这种行为混淆了 qsort()

关于在数组的子集上调用 qsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com