参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数(里面用的不是快速排序)

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值