Question: There was a few either out dated, or incomplete questions similar, but no real answer to the proper question given the main function. Using the
There was a few either out dated, or incomplete questions similar, but no real answer to the proper question given the main function. Using the C programming language implement Heapsort in the manner described in class. Here is some example code to use as a guideline. Remember, you need only implement the sort algorithm, both the comparison and main functions have been provided. Code:
/* * * main.c file * */
#include
static int compare(const void *, const void *);
int main(int argc, char *argv[]) {
int nelem = argc == 2 ? atoi(argv[1]) : SHRT_MAX;
TYPE *a = calloc(nelem, sizeof(TYPE));
#ifdef RAND for (int i = 0; i < nelem; ++i) {
a[i] = (TYPE)rand() / RAND_MAX; } #else for (int i = 0; i < nelem; ++i) {
a[i] = i; } #endif
#if defined BUBB srtbubb(a, nelem, sizeof(TYPE), compare); #elif defined HEAP srtheap(a, nelem, sizeof(TYPE), compare); #elif defined INSR srtinsr(a, nelem, sizeof(TYPE), compare); #elif defined MERG srtmerg(a, nelem, sizeof(TYPE), compare); #else qsort(a, nelem, sizeof(TYPE), compare); #endif
#ifdef PRNT for (int i = 0; i < nelem; ++i) {
printf("%f ", a[i]); } #else for (int i = 0; i < nelem - 1; ++i) {
if (a[i] > a[i + 1]) {
printf("fail "); goto end; } }
printf("pass "); #endif
end:
free(a);
return 0; }
static int compare(const void *p1, const void *p2) {
if (*(TYPE *)p1 < *(TYPE *)p2) {
return -5; } else if (*(TYPE *)p1 > *(TYPE *)p2) {
return +5; }
return 0; }
/* * * srt.h file * */
#ifndef SRT_H #define SRT_H
#include
#define MAX_BUF 256
#define swap(qx,qy,sz) \ do { \ char buf[MAX_BUF]; \ char *q1 = qx; \ char *q2 = qy; \ for (size_t m, ms = sz; ms > 0; ms -= m, q1 += m, q2 += m) { \ m = ms < sizeof(buf) ? ms : sizeof(buf); \ memcpy(buf, q1, m); \ memcpy(q1, q2, m); \ memcpy(q2, buf, m); \ } \ } while (0)
void srtbubb(void *, size_t, size_t, int (*)(const void *, const void *)); void srtheap(void *, size_t, size_t, int (*)(const void *, const void *)); void srtinsr(void *, size_t, size_t, int (*)(const void *, const void *)); void srtmerg(void *, size_t, size_t, int (*)(const void *, const void *));
#endif /* SRT_H */
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
