C语言泛型编程冒泡排序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Node
{
    int flag;
    char str[30];
};

void swap_int(void *a,void *b)
{
    int  *aa=(int*)a;
    int  *bb=(int*)b;
    if(*aa>*bb)
    {
        int temp=*aa;
       *aa=*bb;
        *bb=temp;
    }
}

void swap_float(void *a,void *b)
{
    float  *aa=(float*)a;
    float   *bb=(float*)b;
    if(*aa>*bb)
    {
        float  temp=*aa;
        *aa=*bb;
        *bb=temp;
    }
}

void swap_char(void *a,void *b)
{
    char  *aa=(char*)a;
    char   *bb=(char*)b;
    if(*aa>*bb)
    {
    char temp=*aa;
    *aa=*bb;
    *bb=temp;
    }
}

void swap_iandf(void *a,void *b)
{
    struct Node *aa=(struct Node *)a;
    struct Node *bb=(struct Node *)b;
    if(aa->flag==1&&bb->flag==2)
    {
        int aa1=atoi(aa->str);
        float bb1=atof(bb->str);
        if(aa1>bb1)
        {
            struct Node temp=*aa;
            *aa=*bb;
            *bb=temp;
        }
    }
    else if(aa->flag==2&&bb->flag==1)
    {
        float aa1=atof(aa->str);
        int bb1=atoi(bb->str);
        if(aa1>bb1)
        {
            struct Node temp=*aa;
            *aa=*bb;
            *bb=temp;
        }
    }
    else if(aa->flag==1&&bb->flag==1)
    {
        int aa1=atoi(aa->str);
        int bb1=atoi(bb->str);
        if(aa1>bb1)
        {
            struct Node temp=*aa;
            *aa=*bb;
            *bb=temp;
        }
    }
    else if(aa->flag==2&&bb->flag==2)
    {
        float aa1=atof(aa->str);
        float bb1=atof(bb->str);
        if(aa1>bb1)
        {
            struct Node temp=*aa;
            *aa=*bb;
            *bb=temp;
        }
    }
}
void sort(void *number[],int flag)
{
    int i,j;
    void(*swap)(void*,void*);
    switch(flag)
    {
        case 1:
        swap=swap_int;
        break;
        case 2:
        swap=swap_char;
        break;
        case 3:
        swap=swap_float;
        break;
        case 4:
        swap=swap_iandf;
        break;
    }
    for(i=0;i<10;i++)
    for(j=0;j<10-i-1;j++)
    {
         swap(number[j],number[j+1]);
    }
}


int main()
{
    int flag,i;
    int  p1[10]={10,9,8,7,6,5,4,3,2,1};
    char  p2[11]="sadfghjklq";
    float  p3[10]={10.1,9.1,8.1,7.1,6.1,5.1,4.1,3.1,2.1,1.1};
    struct Node p4[10]={{1,"123"},{2,"111.5"},{1,"126"},{2,"31.5"},{1,"90"},{2,"111.5"},{1,"123"},{2,"111.5"},{1,"123"},{2,"111.5"}};
    printf("%d\n",p4[0].flag);
    void* number[10];
    printf("1 int 2 char 3 float 4 intandfloat\n");
    scanf("%d",&flag);
    switch(flag)
    {
        case 1:
        for(i=0;i<10;i++)
        {
            number[i]=(void*)&p1[i];
        }
        break;
        case 2:
        for(i=0;i<10;i++)
        {
            number[i]=(void*)&p2[i];
        }
        break;
        case 3:
         for(i=0;i<10;i++)
        {
            number[i]=(void*)&p3[i];
        }
        break;
        case 4:
         for(i=0;i<10;i++)
        {
            // printf("1 int 2 float\n");
            // scanf("%d",&p4[i].flag);
            // scanf("%s",p4[i].str);
            number[i]=(void*)&p4[i];
        }
        break;
    }
    sort(number,flag);
    switch(flag)
    {
        case 1:
        for(i=0;i<10;i++)
        {
            printf("%d ",p1[i]);
        }
        printf("\n");
        break;
        case 2:
        printf("%s\n",p2);
        break;
        case 3:
        for(i=0;i<10;i++)
        {
            printf("%f ",p3[i]);
        }
        printf("\n");
        break;
        case 4:
        for(i=0;i<10;i++)
        {
            printf("%s\n",p4[i].str);
        }
        break;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值