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

void quicksort_(int a[], int l, int r);
void quicksort(int a[], int n);

void quicksort_(int a[], int l, int r) {
	int lp;
	int rp;
	int c;
	int p;
	int t;
	
	while (l < r) {
		lp = l;
		rp = r;
		c = ((rp - lp) >> 1) + lp;
		
		t = a[c];
		if (t < a[lp]) {
			a[c] = a[lp];
			a[lp] = t;
		}
		t = a[rp];
		if (t < a[c]) {
			a[rp] = a[c];
			if (t < a[lp]) {
				a[c] = a[lp];
				a[lp] = t;
			} else {
				a[c] = t;
			}
		}
		
		p = a[c];
		lp++;
		rp--;
		
		while (lp <= rp) {
			while (a[lp] < p) {
				lp++;
			}
			
			while (p < a[rp]) {
				rp--;
			}
			
			if (rp < lp) {
				break;
			}
			
			t = a[lp];
			a[lp] = a[rp];
			a[rp] = t;
			
			lp++;
			rp--;
		}
		
		if (rp - l < r - lp) {
			quicksort_(a, l, rp);
			l = lp;
		} else {
			quicksort_(a, lp, r);
			r = rp;
		}
	}
}

void quicksort(int a[], int n) {
	quicksort_(a, 0, n - 1);
}

int main(void) {
	FILE *fin;
	char buf[256];
	char *token;
	int nums[10];
	int i;
	
	fin = fopen("numbers.dat", "r");
	fgets(buf, 256, fin);
	fclose(fin);

	token = strtok(buf, " ");
	for (i = 0; i < 10; i++) {
		nums[i] = atoi(token);
		token = strtok(NULL, " ");
	}

	quicksort(nums, 10);
	
	for (i = 0; i < 10; i++) {
		printf("%d ", nums[i]);
	}
	
	return 0;
}