1.源代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Sort_Array(void *base, int num, int size, int(*compare)(const void*, const void *)) {
char *p1 = (char *)base;
void *temp = malloc(size);
for (int i = 0; i < num; i++) {
for (int j = 0; j < num - i - 1; j++) {
void *p2 = p1 + size * j;
void *p3 = p1 + size * (j + 1);
if (compare(p2, p3) > 0) {
memcpy(temp, p2, size);
memcpy(p2, p3, size);
memcpy(p3, temp, size);
}
}
}
free(temp);
}
int compare02(const void *p1, const void *p2) {
int *pp1 = (int *)p1;
int *pp2 = (int *)p2;
if (*pp1 < *pp2) {
return -1;
}
if (*pp1 > *pp2) {
return 1;
}
return 0;
}
int compare03(const void *p1, const void *p2) {
double *pp1 = (double *)p1;
double *pp2 = (double *)p2;
if (*pp1 < *pp2) {
return -1;
}
if (*pp1 > *pp2) {
return 1;
}
return 0;
}
void test03() {
int arr[] = { 70,30,80,20,60 };
int len = sizeof(arr) / sizeof(int);
Sort_Array(arr, len, sizeof(int), compare02);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n-------------------------------\n");
double arr2[] = { 10.25,30.56,80.88,9.12,11.1111111111113 };
int len2 = sizeof(arr2) / sizeof(double);
Sort_Array(arr2, len, sizeof(double), compare03);
for (int i = 0; i < len2; i++) {
printf("%.14lf ", arr2[i]);
}
}
int main(void) {
//test01();
//test02();
test03();
printf("\n");
system("pause");
return 0;
}
2.运行结果