#include<iostream>
#include<stdio.h>
#include<string.h>
/*
要求:
参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数
*/
void mysort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *))
{
//base 为要排序的数组
//nelem 为要排序的数组的长度
//width 为数组元素的大小(以字节为单位)
//默认是从小到大排序的!
//便于理解我们用冒泡排序模拟这个重点不在于用什么排序而在于指针的怎么使用
int i=0,j=0;
char *p=(char *)base;
//现在用*(p+i*width)//表示第i个元素
for(i=0;i<nelem-1;i++)
{
for(j=0;j<nelem-1-i;j++)
{
if(1==Comp((void*)(p+j*width),(void*)(p+(j+1)*width)))
{
char *temp=new char[width];
memcpy(temp,p+j*width,width);
memcpy(p+j*width,p+(j+1)*width,width);
memcpy(p+(j+1)*width,temp,width);
delete []temp;
}
}
}
}
struct DATASTYPE{
int m_a;
int m_b;
};
int comp(const void *a,const void *b)
{
DATASTYPE *pdata1 =(DATASTYPE *)a;
DATASTYPE *pdata2 =(DATASTYPE *)b;
if(pdata1->m_a >= pdata2->m_a)
return 1;
else
return 0;
}
void output(DATASTYPE *a,int n)
{
for(int i=0;i<n;i++)
{
printf("m_a==%d ",a[i].m_a);
printf("m_b==%d\n",a[i].m_b);
}
}
int main()
{
DATASTYPE array[4]={
{1,4},
{5,2},
{2,6},
{3,8}
};
output(array,4);
printf("排序之前.......\n");
mysort(array,4,sizeof(DATASTYPE),comp);
output(array,4);
printf("排序之后.......\n");
return 0;
}
#include<stdio.h>
#include<string.h>
/*
要求:
参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数
*/
void mysort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *))
{
//base 为要排序的数组
//nelem 为要排序的数组的长度
//width 为数组元素的大小(以字节为单位)
//默认是从小到大排序的!
//便于理解我们用冒泡排序模拟这个重点不在于用什么排序而在于指针的怎么使用
int i=0,j=0;
char *p=(char *)base;
//现在用*(p+i*width)//表示第i个元素
for(i=0;i<nelem-1;i++)
{
for(j=0;j<nelem-1-i;j++)
{
if(1==Comp((void*)(p+j*width),(void*)(p+(j+1)*width)))
{
char *temp=new char[width];
memcpy(temp,p+j*width,width);
memcpy(p+j*width,p+(j+1)*width,width);
memcpy(p+(j+1)*width,temp,width);
delete []temp;
}
}
}
}
struct DATASTYPE{
int m_a;
int m_b;
};
int comp(const void *a,const void *b)
{
DATASTYPE *pdata1 =(DATASTYPE *)a;
DATASTYPE *pdata2 =(DATASTYPE *)b;
if(pdata1->m_a >= pdata2->m_a)
return 1;
else
return 0;
}
void output(DATASTYPE *a,int n)
{
for(int i=0;i<n;i++)
{
printf("m_a==%d ",a[i].m_a);
printf("m_b==%d\n",a[i].m_b);
}
}
int main()
{
DATASTYPE array[4]={
{1,4},
{5,2},
{2,6},
{3,8}
};
output(array,4);
printf("排序之前.......\n");
mysort(array,4,sizeof(DATASTYPE),comp);
output(array,4);
printf("排序之后.......\n");
return 0;
}