#include <unistd.h>
#include "numlist.h"
+#define ATYPE int
+
void printlist(char * message, int * ptr);
int rank(int elem, int * list);
/* merge(a,n,b,m,c): merges a of size n and b of size m into c */
-void merge(int ti, int * a, int n, int * b, int m, int * c);
+void merge(int ti, ATYPE * a, int n, ATYPE * b, int m, ATYPE * c);
int main ( int argc, char ** argv) {
int n = LISTSIZE;
int p = 1;
int opt, i;
int a_len, b_len, b_len_end, b_len_begin;
- int * c;
+ ATYPE * c;
double startTime, endTime;
while ((opt = getopt(argc, argv, "t:")) != -1) {
//printf ("Maximal number of threads: %i\n", omp_get_max_threads());
//printf ("----------------------------------\n");
- c = (int *) malloc((LISTSIZE * 2 + 1) * (sizeof (int)));
+ c = (ATYPE *) malloc((LISTSIZE * 2 + 1) * (sizeof (ATYPE)));
c[LISTSIZE*2] = -1;
//printlist("0 Sorted List A:", a);
return 0;
}
-void printlist(char * message, int * ptr) {
+void printlist(char * message, ATYPE * ptr) {
printf (message);
while (*ptr != -1) {
printf (" %i", *ptr);
printf ("\n");
}
-int rank(int elem, int * list) {
+int rank(int elem, ATYPE * list) {
int pos;
pos = 0;
return -1;
}
-void merge(int ti, int * a, int n, int * b, int m, int * c) {
+void merge(int ti, ATYPE * a, int n, ATYPE * b, int m, int * c) {
int sum;
int i;
/*printf ("sorting a:%i (%i) and b:%i (%i)\n", *a, n, *b, m);*/
//printf ("%i modifying %i (%i+%i) (c[%i]/0x%08x -> c[%i]/0x%08x)\n", ti, sum, n, m, 0, (unsigned int) &c, sum-1, ((unsigned int) &c)+sum);
for (i = 0; i < sum; i++) {
// n+m == 0
- if (*a < 0 && *b < 0) {
+ if (n <= 0 && m <= 0) {
printf ("%i Calculation failed somehow...\n", ti);
return;
}
- if (*a < 0) {
- c[i] = *b; m--;
- b++;
+ if (n <= 0) {
+ c[i] = *b++; m--;
} else {
- if (*b < 0) {
- c[i] = *a; n--;
- a++;
+ if (m <= 0) {
+ c[i] = *a++; n--;
} else {
if (*a < *b) {
- c[i] = *a; n--;
- a++;
+ c[i] = *a++; n--;
} else {
- c[i] = *b; m--;
- b++;
+ c[i] = *b++; m--;
}
}
}
}
+ printf ("merge done, n=%d, m=%d\n", n, m);
return;
}