| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 
 |  
#include <iostream>
using namespace std;
 
const int N=10;
void BubbleSort(void *base,size_t num,size_t size,int (*comparator)(const void *elem1,const void *elem2));
int intCompare(const void* elem1,const void* elem2);
int floatCompare(const void* elem1,const void* elem2);
int strCompare(const void* elem1,const void* elem2);
 
int main()
{
	int a[N],choice;  //a, b et c sont les 3 tableaux de chaque type qui seront triés dans le main
	float b[N],temp_choice;
	char * c[N];
    int (*comparator)(const void *elem1,const void *elem2);//pointeur sur les fonctions de comparaisons
	cout<<"1.Integer Sort"<<endl
		<<"2.Float Sort"<<endl
		<<"3.String Sort"<<endl
		<<"4.Exit"<<endl
		<<"What is your choice? "<<endl;
	cin>>temp_choice;
	while (temp_choice<1 || temp_choice>4 || temp_choice-(int)temp_choice!=0)
	{
		cout<<"Wrong value! Enter again : ";
		cin>>temp_choice;
	}
	choice=(int)temp_choice;
	switch (choice)
	{
	case 1:BubbleSort(a,N,sizeof(int),intCompare);
		break;
	case 2:BubbleSort(b,N,sizeof(float),floatCompare);
		break;
	case 3:BubbleSort(c,N,sizeof(char *),strCompare);
		break;
	case 4:return 0;
		break;
	}
 
return 0;
 
}
    //fonction générale de tri du tableau(de int,float ou char*)
	void BubbleSort(void *base,size_t num,size_t size,int (*comparator)(const void *elem1,const void *elem2))
	{
		for (int i=0;i<num;++i)
			for (int j=0;j<num-i-1;++j)
				if ( (*comparator)(*(base+j*size),*(base+(j+1)*size))==1)
				{
 
 
 
 
 
 
 
	}
	//fonction de comparaison entre deux entiers
	int intCompare(const void* elem1,const void* elem2)
	{
		if (*((int*)elem1)>*((int*)elem2))
			return 1;
		else
		{
			if (*((int*)elem1)<*((int*)elem2))
				return -1;
			else
				return 0;
		}
	}
    //fonction de comparaison entre deux float
	int floatCompare(const void* elem1,const void* elem2)
	{
		if (*((float*)elem1)>*((float*)elem2))
			return 1;
		else
		{
			if (*((float*)elem1)<*((float*)elem2))
				return -1;
			else
				return 0;
		}
	}
	//fonction de comparaison entre deux chaines de caracteres
    int strCompare(const void* elem1,const void* elem2)
	{
		return (strcmp(*((char**)elem1),*((char**)elem2)));
	} |