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

void Swap_Me(int *first, int *second)
{
	int tmp = *first;
	*first = *second;
	*second = tmp;
}

void Sort_Quick(int *data, int low, int high)
{
	int i = low,
		j = high,
		x = data[(low + high) / 2];

	do
	{
		while(data[i] < x) i++;
		while(data[j] > x) j--;

		if(i <= j)
		{
			Swap_Me(&data[i], &data[j]);
			i++;
			j--;
		}

	} while(i <= j);

	if(low < j) Sort_Quick(data, low, j);
	if(i < high) Sort_Quick(data, i, high);
}

void Array_Print(int *data, int size)
{
	for(int i = 0; i < size; i++)
	{
		printf("[%i]: %i\r\n", i , data[i]);
	}
}

int Init(int **data)
{
	srand((unsigned int)time(NULL));

	int size = rand();
	*data = (int*)malloc(size * sizeof(int));

	for(int i = 0; i < size; i++)
	{
		*data[i] = rand();
	}

	return size;
}

int main(void)
{
	srand((unsigned int)time(NULL));
	int array_length = rand();
	int *data = (int*)malloc(array_length * sizeof(int));

	for(int i = 0; i < array_length; i++)
	{
		data[i] = rand();
	}

	Array_Print(data, array_length);
	Sort_Quick(data, 0, --array_length);
	Array_Print(data, array_length);

	return 0;
}