大家好我寫一個程序爲C.分揀一般的元素它可以排序任何類型的對象(整型,浮點,複數,對象)排序使用空指針用C
我還以爲是使用空指針的,
void qsort(void *ptr,int sz,int i,int j,int (*fptr) (const void *,const void *))
{
if(i<j)
{
int p=(i+j)/2;
p=partition(ptr,sz,i,j,p,fptr);
qsort(ptr,size,i,p-1,fptr);
qsort(ptr,size,p+1,j,fptr);
}
}
作比較
sz時的價值,我們就會知道,無論是其一個指向字符串,整數,char和float等
int compare(const void* a,const void* b,int sz)
{
if(sz==0) //means pointer to a string
return strcmp((char*)a, (char*)b);
else if(sz==1) //means int
return *(int*)a - *(int*)b;
else if(sz==2) //means float
return *(float*)a- *(float*)b;
else if(sz==3)
return *(char*)a- *(char*)b;
}
用於交換兩個元件
void swap(void *a,void *b,int sz)//for swapping
{
if(sz==0)
{
void *c;
c=a;
a=b;
b=c;
}
else if(sz==1)
{
a=(int*)a;
b=(int*)b;
int c;
c= *a;
*a=*b;
*b=c;
}
else if(sz==2)
{
a=(float*)a;
b=(float*)b;
float c;
c= *a;
*a=*b;
*b=c;
}
EDITED
的qsort(ARR,4,0,9,&比較);
完整的代碼正在建設中,請告訴我是否可以在我的方法中進行一些優化,或者針對此問題的一些更好的替代方法。 因爲它在我看來,這是真的要在尺寸
許多許多感謝名單大提前
你有不只是使用普通的qsort功能的原因是什麼? http://linux.die.net/man/3/qsort – 2012-07-07 04:54:50
我不會擔心大小,但枚舉會讓你的代碼更具可讀性。順便說一句,在swap()中你的方法不起作用:特別是當你第一次說「a =(int *)a」,然後是「* a = * b」時,對於第二個語句,a和b不再是int *。 – 2012-07-07 05:04:33
@MichaelAnderson我正在使用類似的東西 – Luv 2012-07-07 05:10:33