快速排序算法C语言实现
#include <stdio.h>
void swap(void *a,void *b,int size)
{
char tmp;
for(int i=0;i<size/sizeof(char);i++)
{
tmp=*((char *)a+i);
*((char *)a+i)=*((char *)b+i);
*((char *)b+i)=tmp;
}
}
int mycmp(void *a,void *b)
{
return *(int*)a > * (int*)b;
}
int qsort(void *pstart,int num,int size,int (* cmp)(void *,void *))
{
char* ps = pstart;
if(num>2)
{
int i=num-1,o=1;
for(;i>o;i--)
{
if(cmp(ps, ps + i * size))
{
for (; i > o; o++)
{
if (cmp(ps + o * size, ps))
{
swap(ps + i*size, ps + o * size, size);
break;
}
}
}
}
if(cmp(ps, ps + i * size))
{
swap(ps,ps+i*size,size);
}
qsort(ps,i,size,cmp);
qsort(ps+i*size,num-i,size,cmp);
return 0;
}
else if(num==2)
{
if(cmp(ps,ps+1*size))
{
swap(ps,ps+1*size,size);
}
}
return 0;
}
int main()
{
int array[]={3,1,4,2,6,0,-1};
int length=sizeof(array)/sizeof(int);
qsort(array,length,sizeof(int),mycmp);
for(int i=0;i<length;i++)
printf("%d ",array[i]);
putchar('\n');
return 0;
}