#include <iostream>
#include <tbb/parallel_sort.h>
#include <tbb/task_scheduler_init.h>
#include <math.h>

#define N 5000000

using namespace std;
using namespace tbb;

void init_values(float *x)
{
	for( int i = 0; i < N; i++ ) {
		x[i] = (float) rand() / RAND_MAX;
	}
}

int main()
{
	task_scheduler_init init;

	float *a = (float *) malloc(N * sizeof(float));

	init_values(a);

	cout << "Before sorting ... " << endl;
	for (int i=0; i<5; i++) {
		printf("   a[%d] = %12.9f\n", i, a[i]);
	}
	cout << endl;

	for (int i=N-5; i<N; i++) {
		printf("   a[%d] = %12.9f\n", i, a[i]);
	}

	parallel_sort( a, a + N );
	cout << endl << "After sorting ... " << endl;

	for (int i=0; i<5; i++) {
		printf("   a[%d] = %12.9f\n", i, a[i]);
	}
	cout << endl;

	for (int i=N-5; i<N; i++) {
		printf("   a[%d] = %12.9f\n", i, a[i]);
	}

	return 0;
}

