임시 배열로 요소를 이동하고 다시 복사하지 않고 C에서 배열의 하위 집합을 정렬하는 방법을 찾고있었습니다. 나는 qsort가에 대한 잘못된 이해를해야 할 수도 있습니다,하지만 난 아래의 코드가 작동해야한다고 생각 :배열의 부분 집합에서 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}, {x2, y2}, {x3, y3}}
내 문제는 위의 qsort는 전체 배열을 정렬하는 반면, 마지막 3 개 요소 만 정렬하려고한다는 것입니다.
. 지금까지 게시 한 내용의'qsort()'호출은 원하는 것을 수행해야하는 것처럼 보입니다. (비교 함수는 몇 가지 해답에 설명 된 문제가 있지만). 문제가 비교가 아니라면, 당신이 우리에게 보여주지 않은 것일 것입니다. –