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

void bubbleSort(int size, int array[]){
	//Einige Variablen deklarieren
	int temp;
	int i;
	int j;
	
	for(i=0; i<size; i++){
		for(j = size; j>i; j--){
			if (array[j-1] > array[j]){
				temp = array[j];
				array[j] = array[j-1];
				array[j-1] = temp;
			}
		}
	}
}

int main( int argc, const char* argv[] ){
	//Globale Variablen deklarieren
	int size;
	int *array;
	int i;
	double secs; 
	clock_t tStart, tEnd; 

	
	//Wenn genügend Argumente am Start sind, lies dir Groesse aus.
	if(argc > 1){
		size = atoi(argv[1]);
	}else{
		//Sonst beschwer dich
		printf("Zu wenig Argumente.\n");
		return 1;
	}
	
	//Wenn die Groesse irreal ist, beschwer dich
	if (size < 1){
		printf("Die angegebene Groesse kann nicht verarbeitet werden.\n");
		return 1;
	}
	
	//Allokiere das Array
	array = malloc(size * sizeof(int));
	if(array == NULL){
		printf("Nicht genug Speicher vorhanden");
		return 1;
	}
		
		//Beginn Array absteigend fuellen
		for(i = 0; i<size; i++){
			array[i] = size-i;
		}
			
	//Dann wollnwama den Array mit bubbleSort sortieren. Mit Zeitmessung und so.
	tStart = clock(); 
	bubbleSort(size, array);
	tEnd = clock();
	secs = (double)(tEnd - tStart) / CLOCKS_PER_SEC; 

	
	//Array auf korrekte Sortierung pruefen
	for(i = 0; i<(size-1); i++){
		if(array[i]>array[i+1]){
			printf("Array ist NICHT sortiert. ");
			break;
		}
	}
	
	//Ergebnis der Zeitmessung ausgeben.
	printf("Das hat jetzt %f Sekunden gedauert.\n", secs);
	
	//Toete das Array und beende das Programm erfolgreich.
	free(array);
	return 0;
}

				
			
		
