#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于int类型升序
int compareIntAsc(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
// 比较函数,用于double类型降序
int compareDoubleDesc(const void *a, const void *b) {
return (*(double *)b - *(double *)a);
}
// 通用排序函数
void mySort(void *arr, int size, int elementSize, int (*compare)(const void *, const void *)) {
char *base = (char *)arr;
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - i - 1; ++j) {
char *curr = base + j * elementSize;
char *next = base + (j + 1) * elementSize;
if (compare(curr, next) > 0) {
char temp[elementSize];
for (int k = 0; k < elementSize; ++k) {
temp[k] = curr[k];
curr[k] = next[k];
next[k] = temp[k];
}
}
}
}
}
int main() {
int intArr[] = {5, 3, 7, 1, 9};
int intSize = sizeof(intArr) / sizeof(intArr[0]);
mySort(intArr, intSize, sizeof(int), compareIntAsc);
printf("Sorted int array (ascending): ");
for (int i = 0; i < intSize; ++i) {
printf("%d ", intArr[i]);
}
printf("\n");
double doubleArr[] = {5.5, 3.3, 7.7, 1.1, 9.9};
int doubleSize = sizeof(doubleArr) / sizeof(doubleArr[0]);
mySort(doubleArr, doubleSize, sizeof(double), compareDoubleDesc);
printf("Sorted double array (descending): ");
for (int i = 0; i < doubleSize; ++i) {
printf("%lf ", doubleArr[i]);
}
printf("\n");
return 0;
}