任务是为数组中的未知类型的元素编写heapsort(仅使用C代码),但我的代码不起作用.以下数字输出为'-100 7 -4 0 33 -3 67 1 5 44'我也尝试仅使用相同的代码进行int输入,并且它完美地工作.所以我认为问题在于将其更改为任何类型的输入.
#include#include #include #include typedef int typeEl; int compare(const void* a, const void* b) { return (*(typeEl*)a - *(typeEl*)b); } void swap(void* a, void* b, size_t sizeOfElem) { void* tmp = calloc(1,sizeOfElem); memcpy(tmp, a, sizeOfElem); memcpy(a, b, sizeOfElem); memcpy(b, tmp, sizeOfElem); } void heapify (int pos, int n, void* arr, size_t sizeOfElem, int (*comp)(const void* c, const void* d)) { while (2 * pos + 1 < n) { int t = 2 * pos +1; if (2 * pos + 2 < n && ((char *)arr + (2*pos+2)*sizeOfElem) >= ((char *)arr + t*sizeOfElem)) { t = 2 * pos + 2; } if (comp((void *) ((char *)arr + pos*sizeOfElem), ((char *)arr + t*sizeOfElem))<0) { swap((void *) ((char *)arr + pos*sizeOfElem), (void *) ((char *)arr + t*sizeOfElem), sizeOfElem); pos = t; } else break; } } void heap_make(int n, void* arr, size_t sizeOfElem) { for (int i = n - 1; i >= 0; i--) { heapify(i, n, arr, sizeOfElem, compare ); } } void heap_sort(int n, void* arr, size_t sizeOfElem) { heap_make(n, arr, sizeOfElem); while(n>0) { swap((void *) ((char *)arr), (void *) ((char *)arr + (n-1)*sizeOfElem), sizeOfElem);; n--; heapify(0,n, arr, sizeOfElem, compare); } } int main() { int n; int m[10] = {1,-3,5,-100,7,33,44,67,-4, 0}; heap_sort(10, m, sizeof(int)); for (n=0; n<10; n++) printf ("%d ",m[n]); return 0; }
有人可以提供建议吗?谢谢你的帮助!