代码实现(Visual Studio 2017)
#include <stdio.h>
#include <windows.h>
static int int_cmp(void* p1, void* p2)//int型比较函数
{
return *((int*)p1) > *((int*)p2);
}
static int float_cmp(void* p1, void* p2)//float型比较函数
{
return *((float*)p1) > *((float*)p2);
}
void swap(void *p1, void *p2, int size)//任意类型通用交换函数
{
char *p = (char *)p1;
char *q = (char *)p2;
while (size--)
{
*p ^= *q;
*q ^= *p;
*p ^= *q;
q++;
p++;
}
}
void MySort(void *base, int count, int size, int(*cmp)(void *p1, void *p2))//任意类型通用排序
{
int i = 0;
int j = 0;
int flag = 0;
for (; i < count-1; i++)
{
flag = 0;
for (j = 0; j < count - 1 -i; j++)
{
if (cmp( (char*)base+j*size , (char*)base + (j+1)*size ) > 0)
{
flag = 1;
swap((char*)base + j*size, (char*)base + (j + 1)*size,size);
}
}
if (flag == 0)
break;
}
}
void show_int(int *arr,int count)//int型输出函数
{
for (int i = 0; i < count; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void show_float(float *arr, int count)//float型输出函数
{
for (int i = 0; i < count; i++)
{
printf("%f ", arr[i]);
}
printf("\n");
}
//主程序
int main()
{
int arr1[10] = { 5,45,32,2,0,89,456,21,3556,51 };
float arr2[10] = { 5.1,45.5,12.5,100.9,100.1,100.54,456.1,12.2,3556.0,45.2 };
int count1 = sizeof(arr1) / sizeof(arr1[0]);
int count2 = sizeof(arr2) / sizeof(arr2[0]);
MySort(arr1, count1, sizeof(arr1[0]), int_cmp);
MySort(arr2, count2, sizeof(arr2[0]), float_cmp);
show_int(arr1,count1);
show_float(arr2,count2);
system("pause");
return 0;
}