#include "stdafx.h"
#include <math.h>
#include <time.h>

void bubbleSorting(int numbers[])
{
	int x = 0, y = 1, hilf;
	int counter = 0;
	while(counter<9)
	{
		if(y < 9)
		{
			y++;
			x++;
		}
		else
		{	
			x = 0;
			y = 1;
			counter = 0;
		}
		if(numbers[x]>numbers[y])
		{
			hilf = numbers[x];
			numbers[x]  =numbers[y];
			numbers[y] = hilf;
		}
		else
			counter++;
	}
}
void mergeSorting(int numbers[])
{
	int counter_left, counter_right, counter_comp, maximum_right, maximum_left;
	int layers[10][3];
	int i;
	for(int a = 0; a <= 9; a = a + 2)
	{
		if(numbers[a]>numbers[a+1])
		{
			layers[a+1][0] = numbers[a];
			layers[a][0] = numbers[a+1];
		}
		else
		{	
			layers[a][0] = numbers[a];
			layers[a+1][0] = numbers[a+1];
		}
	}
	for(int c = 1; c<=3; c++)
	{
		for(int b = 0; b <= 8; b=b+(int)pow((double)2, c + 1))
		{
			counter_left = 0;
			counter_comp = 0;
			counter_right = (int)pow((double)2, c);
			maximum_right = (int)pow((double)2, c+1) - 1;
			if(maximum_right > 9)
				maximum_right = 9;
			maximum_left = (int)pow((double)2, c) - 1;
			if(maximum_left > 9)
				maximum_left = 9;
			printf("Hauptschleife: b = %i\ncounter_right = %i, counter_left = %i, counter_comp = %i, maximumright = %i\n \n", b, counter_right, counter_left, counter_comp, maximum_right);
			while(counter_comp < (int)pow((double)2, c + 1) && b+counter_comp < 10)
			{
				if(b+counter_right > 9)  //Größe des Arrays)
				{
					layers[b+counter_comp][c] = layers[b+counter_left][c-1];
					counter_left++;
					counter_comp++;
				}
				else
				{
					printf("Unterschleife: \nlayers[b+counter_left] = %i, layers[b+counter_right] = %i, counter_comp = %i, counter_left: %i\n\n", layers[b+counter_left][c-1], layers[b+counter_right][c-1], counter_comp, counter_left); 
					if(layers[b+counter_left][c-1] >= layers[b+counter_right][c-1]) // Ist die Karte auf dem linken Stapel größer?
					{	
						layers[b+counter_comp][c] = layers[b+counter_right][c-1]; //Werzuweisung für die nächste Ebende
						if(counter_right < maximum_right) // Sind im Stapel noch Karten bzw. ist counter_right schon bei maximum_right angekommen?
							counter_right++;
						else //rechter Stapel leer
						{
							for(int left_alone = counter_left; left_alone <= maximum_left; left_alone++) //Zuweisung der übriggeblieben Karten auf dem linken Stapel
							{
								counter_comp++;
								layers[b+counter_comp][c] = layers[b+counter_left][c-1]; 
								counter_left++;
							}
							break;
						}
					}
					else //die Karte auf dem rechten Stapel ist größer
					{
						layers[b+counter_comp][c] = layers[b+counter_left][c-1]; //Werzuweisung für die nächste Ebende
						if(counter_left < maximum_left) //Sind im linken Stapel noch Karten?
							counter_left++;
						else //linker Stapel leer
						{
							//Zuweisung der übriggeblieben Karten auf dem rechten Stapel
							for(int right_alone = counter_right; right_alone <= maximum_right; right_alone++)
							{
								counter_comp++;
								layers[b+counter_comp][c] = layers[b+counter_right][c-1]; 
								counter_right++;
							}
							break;
						}
					}
					counter_comp++;
				}
			}
			
		}
	}
	for(int i = 0; i<=9; i++)
		printf("%i\n", layers[i][3]);
}
int main(void)
{
	int numbers[10] = {2,4,1,0,3,4,7,2,9,9};
	mergeSorting(numbers);
	int end;
	scanf("&i", &end);
	return 0;
}