#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;
}
}
06-25
2万+