/* * * after splitting this file into the five source files: * *srt.h, main.c, srtbubb.c, srtinsr.c, srtmerg.c * * compile using the command: * *gcc -std=c99 -DRAND -DPRNT -DTYPE=(float | double)...

1 answer below ยป

Needs to address of the array, size of each individual element, use comparison function, and number of elements. Needs to use header(in example_code.txt). Needs heap sort, bubble sort, insertion sort, and merge sort. The program must compile using the command prompt and must return 10 arrays. The output should return in less than 30 seconds for outcomes more than 1 billion integers(It may vary from each sort).


/* * * after splitting this file into the five source files: * *srt.h, main.c, srtbubb.c, srtinsr.c, srtmerg.c * * compile using the command: * *gcc -std=c99 -DRAND -DPRNT -DTYPE=(float | double) -D(BUBB | HEAP | INSR | MERG) *.c * */ /* * * 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="" */="" *="" *="" *="" main.c="" file="" *="" */="" #include=""> #include #include #include "srt.h" 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\n",="" a[i]);="" }="" #else="" for="" (int="" i="0;" i="">< nelem="" -="" 1;="" ++i)="" {="" if="" (a[i]=""> a[i + 1]) { printf("fail\n"); goto end; } } printf("pass\n"); #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; } /* * * srtbubb.c file * */ #include #include #include "srt.h" void srtbubb(void *base, size_t nelem, size_t size, int (*compar)(const void *, const void *)) { for (size_t i = nelem - 1; i > 0; --i) { bool sorted = true; for (size_t j = 0; j < i;="" ++j)="" {="" char="" *qj="(char" *)base="" +="" size="" *="" j;="" char="" *qn="qj" +="" size;="" if="" (compar(qj,="" qn)=""> 0) { swap(qj, qn, size); sorted = false; } } if (sorted) { break; } } return; } /* * * srtinsr.c file * */ #include #include #include "srt.h" void srtinsr(void *base, size_t nelem, size_t size, int (*compar)(const void *, const void *)) { char buf[size], *qb = base; for (size_t i = 1; i < nelem;="" ++i)="" {="" memcpy(buf,="" qb="" +="" size="" *="" i,="" size);="" size_t="" j="i;" while="" (j=""> 0 && compar(buf, qb + size * (j - 1)) < 0)="" {="" memcpy(qb="" +="" size="" *="" j,="" qb="" +="" size="" *="" (j="" -="" 1),="" size);="" --j;="" }="" memcpy(qb="" +="" size="" *="" j,="" buf,="" size);="" }="" return;="" }="" *="" *="" *="" srtmerg.c="" file="" *="" */="" #include=""> #include #include "srt.h" void srtmerg(void *base, size_t nelem, size_t size, int (*compar)(const void *, const void *)) { char *qb = base, *ql, *qr, *qt; size_t i, j, l, r; if (nelem <= 1)="" {="" return;="" }="" else="" if="" (nelem="=" 2)="" {="" if="" (compar(qb,="" qb="" +="" size)=""> 0) { swap(qb, qb + size, size); } return; } l = nelem / 2; r = nelem - l; ql = qt = malloc(size * l); memcpy(ql, qb, size * l); qr = qb + size * l; srtmerg(ql, l, size, compar); srtmerg(qr, r, size, compar); i = 0; j = l; while(i < l="" &&="" j="">< nelem)="" {="" if="" (compar(ql,="" qr)=""><= 0) { memcpy(qb, ql, size); qb += size; ql += size; ++i; } else { memcpy(qb, qr, size); qb += size; qr += size; ++j; } } 0)="" {="" memcpy(qb,="" ql,="" size);="" qb="" +="size;" ql="" +="size;" ++i;="" }="" else="" {="" memcpy(qb,="" qr,="" size);="" qb="" +="size;" qr="" +="size;" ++j;="" }="">
Answered 13 days AfterJun 24, 2022

Answer To: /* * * after splitting this file into the five source files: * *srt.h, main.c, srtbubb.c,...

Arun Shankar answered on Jul 07 2022
70 Votes
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions ยป

Submit New Assignment

Copy and Paste Your Assignment Here