#include "math_sort.h"

void quicksort (int lo, int hi, sort_element* data)
{
	int m1 = lo;
	int m2 = hi;
	void* temp_ptr;
	float temp_val;

	float mp = data[(lo + hi)>>1].cmp_value;

	while (m1<=m2)
	{
		while (data[m1].cmp_value < mp) m1++;
		while (mp < data[m2].cmp_value) m2--;

		if (m1<=m2)
		{
			temp_ptr = data[m1].object_ptr; data[m1].object_ptr = data[m2].object_ptr; data[m2].object_ptr = temp_ptr;
			temp_val = data[m1].cmp_value; data[m1].cmp_value = data[m2].cmp_value; data[m2].cmp_value = temp_val;
			m1++;
			m2--;
		}
	}

	if (m2>lo) quicksort(lo, m2, data);
	if (m1<hi) quicksort(m1, hi, data);
}