私は一般的なクイックソート機能を持っています:
void qsort(void* sup,int n,
int(*cmp) (void *x,void *y),
void (*swap) (void *a,void *b))
{
int pv=n/2,l=0,h=n-1;
if(n<2)
return;
while(h-1>=l)
{
if(l==pv)
{
swap(sup+pv,sup+pv+1);
pv++;
}
if(h==pv)
{
swap(sup+pv,sup+(pv-1));
pv--;
}
if(cmp(sup+h, sup+pv))
{
h--;
continue;
}
if(cmp(sup+pv, sup+l))
{
l++;
continue;
}
swap(sup+l,sup+h);
l++,h--;
}
qsort(sup, l, cmp, swap);
qsort(sup+l,n-l, cmp, swap);
}
これらの関数をパラメータとして:
int cmp(int *c1, int *c2) {
return *c1 > *c2;
}
void swap(int *a,int *b)
{
int c= *a;
*a=*b;
*b=c;
}
主な機能は次のとおりです。
int main()
{
int arr[4] = {3,4,1,2};
print(arr, 4);
printf("\n\n");
qsort(arr, 4, &cmp, &swap);
print(arr, 4);
return 0;
}
ここで、印刷は次のとおりです。
void print(int* arr, int size) {
int i = 0;
for(; i < size; ++i) {
printf("%d \t", arr[i]);
}
}
問題:
のプロトタイプが次の場合qsort
:
void qsort(int* sup,int n,
int(*cmp) (void *x,void *y),
void (*swap) (void *a,void *b))
それはうまく機能し、
しかし、sup
パラメータを次のように変更するとvoid*
:
void qsort(void* sup,int n,
int(*cmp) (void *x,void *y),
void (*swap) (void *a,void *b))
うまくいきません。誰にも理由はありますか?
私は、MinGW を使用して、Windows で Code::Blocks を使用しています。