/*
 * Program to demonstrate bubble sort, using VLA.
 */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void printarray(int size, int nums[size]) {
	for (int i = 0; i < size; ++i) {
		printf("nums[%d] is %d\n", i, nums[i]);
	}
}
void fillwithrandom(int seed, int size, int nums[size]) {
	srand(seed);
	for (int i = 0; i < size; ++i) {
		nums[i] = rand();
	}
}

/* return number of comparisons */
long long bubble_sort(int size, int nums[]) {
	long long count = 0;
	for (int num_to_sort = size; num_to_sort > 1; --num_to_sort) {
		for (int i = 0; i < num_to_sort-1; ++i) {
			count += 1;
			if (nums[i] > nums[i+1]) {
				int temp = nums[i];
				nums[i] = nums[i+1];
				nums[i+1] = temp;
			}
		}
	}
	return count;
}

bool check_sorted(int size, int nums[]) {
	for (int i = 0; i < size-1; ++i) {
		if (nums[i] > nums[i+1]) {
			return false;
		}
	}
	return true;
}

int main(void) {

	printf("enter array size, seed\n");
	int asize;
	int seed;
	if (scanf("%d %d", &asize, &seed) != 2) {
		printf("error\n");
		return 1;
	}
	int nums[asize];
	fillwithrandom(seed, asize, nums);
	/* 
	printarray(asize, nums); 
	*/
	printf("%lld comparisons\n", bubble_sort(asize, nums));
	/*
	printf("\n");
	printarray(asize, nums); 
	printf("\n");
	*/
	printf("sorted?  %c\n", check_sorted(asize, nums) ? 'y' : 'n');

	return 0;
}