我一直在寻找一种在 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 个元素进行排序。