#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>
#include <string.h>
#include "lcd-routines.h"
#define N_MAX 32
int (*cmp)(int a, int b);
int less(int a, int b) {
return (a < b);
}
int greaterequal(int a, int b) {
return (a >= b);
}
int main(void) {
int a[N_MAX];
int b[N_MAX];
int tmp;
int i, j, l;
int d;
int n;
int s;
char outstr[256];
lcd_init();
srand(5);
for(i = 0; i < N_MAX; i++)
a[i] = b[i] = rand() % 30;
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
for(i = 0; i < N_MAX; i++) {
for(j = i + 1; j < N_MAX; j++) {
if(a[j] < a[i]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
for(i = N_MAX - 1; i > 0; i--) {
for(j = i - 1; j >= 0; j--) {
if(a[i] < a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
for(j = i + 1; j < N_MAX; j++) {
if(a[i] < a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
for(i = N_MAX - 1; i > 0; i--) {
for(j = i - 1; j >= 0; j--) {
if(a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
d = 1;
if(i < 0) {
s = N_MAX;
n = 0;
cmp = greaterequal;
}
else {
s = 0;
n = N_MAX;
cmp = less;
}
for (i = s; cmp(i,n); i += d) {
for(j = i; cmp(j, n); j += d) {
if(cmp(a[i], a[j])) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
d = -1;
if(d < 0) {
s = N_MAX;
n = 0;
cmp = greaterequal;
}
else {
s = 0;
n = N_MAX-1;
cmp = less;
}
for (i = s; cmp(i,n); i += d) {
for(j = i; cmp(j, n); j += d) {
if(cmp(a[i], a[j])) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
for(d = 4; d > 1; d--) {
sprintf(outstr, "\n");
lcd_string(outstr);
if(d < 0) {
s = N_MAX;
n = 0;
cmp = greaterequal;
}
else {
s = 0;
n = N_MAX-1;
cmp = less;
}
for (i = s; cmp(i,n); i += d) {
for(j = i; cmp(j, n); j += d) {
if(cmp(a[i], a[j])) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
for(i = 0; i < N_MAX; i+= 2) {
if(a[i] > a[i+1]) {
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
sprintf(outstr, "\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++)
a[i] = b[i];
sprintf(outstr, "\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
for(i = 0; i < N_MAX/2; i++) {
for(j = i, l = N_MAX - 1 -i; j < N_MAX/2; j++, l--) {
if(a[j] < a[i]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
if(a[l] > a[N_MAX - 1 -i]) {
tmp = a[N_MAX - 1 -i];
a[N_MAX - 1 -i] = a[l];
a[l] = tmp;
}
}
}
sprintf(outstr, "\n");
lcd_string(outstr);
for(i = 0; i < N_MAX; i++) {
sprintf(outstr, "%i ", a[i]);
lcd_string(outstr);
}
sprintf(outstr, "\n");
lcd_string(outstr);
return 0;
}