.h
namespace ALGORITHEM
{
typedef int (*compareFunc)(void* a, void* b);
int quickSort(void* base, size_t nmemb, size_t size, ALGORITHEM::compareFunc compare);
}
.cpp
int ALGORITHEM::quickSort(void* base, size_t nmemb, size_t size, ALGORITHEM::compareFunc compare)
{
//base on quicksort
if (nmemb <= 1) {
return -1;
}
char* arr =(char*) base;
char* pivot = arr + (nmemb / 2) * size;
void* tmp = malloc(size);
if (tmp == NULL) {
return -1;
}
size_t i, j;
for (i = 0, j = nmemb - 1;; i++, j--) {
while (i < nmemb && compare(arr + i * size, pivot) < 0) {
i++;
}
while (j > 0 && compare(arr + j * size, pivot) > 0) {
j--;
}
if (i >= j) {
break;
}
memcpy(tmp, arr + i * size, size);
memcpy(arr + i * size, arr + j * size, size);
memcpy(arr + j * size, tmp, size);
}
free(tmp);
quickSort(arr, i, size, compare);
quickSort(arr + i * size, nmemb - i - 1, size, compare);
return 0;
}
//调用
int myCompare(void* a, void* b)
{
Temp* ta = (Temp*)a;
Temp* tb = (Temp*)b;
return tb->num-ta->num ;
}
int Test1Method1()
{
Temp Array_Temp[20];
for (int i = 0; i < sizeof(Array_Temp)/sizeof(int); i++)
{
Array_Temp[i].num = i;
}
ALGORITHEM::quickSort(Array_Temp, sizeof(Array_Temp) / sizeof(int), sizeof(Temp), myCompare);
return 0;
}