#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>

#define FCTR 8

void odd_even_merge(unsigned int* d, int n, int skip) {
  int idx,tmp;
  if (n > 2){
    odd_even_merge(d,        n / 2, skip * 2);
    odd_even_merge(d + skip, n / 2, skip * 2);
    for(idx = 1; idx <= n - 3; idx += 2) {
		if (d[idx * skip] > d[(idx + 1) * skip]) {
			tmp=d[idx * skip];
			d[idx * skip]=d[(idx + 1) * skip];
			d[(idx + 1) * skip]=tmp;}
			}
	} 
	else{
		if (d[0] > d[skip]){
			tmp=d[0];
			d[0]=d[skip];
			d[skip]=tmp;
			}
	}
}

void odd_even_mergesort(unsigned int* d/, int n) {
  if (n > 1) {
    odd_even_mergesort(d,         n / 2);
    odd_even_mergesort(d + n / 2, n / 2);
    odd_even_merge(d, n, 1);
  }

}
int main(void) {
	unsigned int* data;
	unsigned int elementSize = FCTR,counter;

		data = (unsigned int*)malloc(sizeof(unsigned int) * elementSize);
		for (counter = 0 ; counter < elementSize ; counter++ ){
			data[counter] = (unsigned int)((rand() / ((double)RAND_MAX+1.0f))* INT_MAX);
		}

		for (counter = 0 ; counter < elementSize ; counter++ ){printf("(%d)\n",data[counter]);}
		printf("\n");
		odd_even_mergesort(data, elementSize);
		printf("\n");
		for (counter = 0 ; counter < elementSize ; counter++ ){printf("(%d)\n",data[counter]);}

		free(data);
}