我一直在尋找一種在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},{x1,y1},{x2,y2},{x3, Y3}}
我的問題是,快速排序稱爲像上面將整個數組排序,而我只希望它的最後3個元素進行排序。
您可以更加清楚通過張貼小,完整的,可編譯演示該問題例如這個問題。您所發佈的內容中的'qsort()'調用看起來應該做你想做的事情(雖然比較函數有幾個答案中描述的問題)。所以如果問題不是比較,那麼這可能是你沒有向我們展示過的東西。 –