提供一个函数,可以对任意类型的数据进行排序,排序规则 选择排序
阅读本代码之前,先要复习一下选择排序。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void selectSort(void *arr
, int eleSize
, int len
,
int (*myCompare
)(void *, void *)) {
int i
, j
;
char *temp
= malloc(eleSize
);
int MinOrMax
;
for (i
= 0; i
< len
; i
++) {
MinOrMax
= i
;
for (j
= i
+ 1; j
< len
; j
++) {
char *pJ
= (char *)arr
+ j
* eleSize
;
char *pMinOrMax
= (char *)arr
+ MinOrMax
* eleSize
;
if (myCompare(pJ
, pMinOrMax
)) {
MinOrMax
= j
;
}
}
if (i
!= MinOrMax
) {
char *pI
= (char *)arr
+ i
* eleSize
;
char *pMinOrMax
= (char *)arr
+ MinOrMax
* eleSize
;
memcpy(temp
, pI
, eleSize
);
memcpy(pI
, pMinOrMax
, eleSize
);
memcpy(pMinOrMax
, temp
, eleSize
);
}
}
if (temp
!= NULL) {
free(temp
);
temp
= NULL;
}
}
int myCompareInt(void *data1
, void *data2
) {
int *num1
= data1
;
int *num2
= data2
;
return *num1
< *num2
;
}
void test01() {
int i
;
int arr
[] = {10, 40, 30, 20, 50};
int len
= sizeof(arr
) / sizeof(int);
selectSort(arr
, sizeof(int), len
, myCompareInt
);
for (i
= 0; i
< len
; i
++) {
printf("%d\n", arr
[i
]);
}
}
struct Person
{
char name
[64];
int age
;
};
int myComparePerson(void *data1
, void *data2
) {
struct Person
*p1
= data1
;
struct Person
*p2
= data2
;
return p1
->age
> p2
->age
;
}
void test02() {
int i
;
struct Person pArray
[] = {
{"aaa", 10}, {"bbb", 60}, {"ccc", 20}, {"ddd", 40}, {"eee", 30}, };
int len
= sizeof(pArray
) / sizeof(struct Person
);
selectSort(pArray
, sizeof(struct Person
), len
, myComparePerson
);
for (i
= 0; i
< len
; i
++) {
printf("name=%s, age=%d\n", pArray
[i
].name
, pArray
[i
].age
);
}
}
int main() {
test02();
return 0;
}
转载请注明原文地址: https://mac.8miu.com/read-66447.html