#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

struct ListItem
{
    int data;
};

bool compareListItems(void* _a, void* _b)
{
    ListItem* a = (ListItem*) _a;
    ListItem* b = (ListItem*) _b;
    return((*a).data > (*b).data);
}

void bubblesort(ListItem* meineliste, int len, bool(*bewertung)(void*, void*))
{
    bool dirty = true;
    while(dirty)
    {
        dirty = false;
        for(int x = 0; x < len; x++)
        {
            if(bewertung(&meineliste[x], &meineliste[x+1]))
            {
                ListItem tmp = meineliste[x];
                meineliste[x] = meineliste[x+1];
                meineliste[x+1] = tmp;
                dirty = true;
            }
        }
    }
}

int main(int argc, char** argv)
{
        if(argc < 2)
        {
            cerr << "Usage: bubblesort <number1> <number2> ..." << endl;
            return(1);
        }
        ListItem *l = (ListItem*) malloc(sizeof(ListItem)*(argc-1));
        for(int i = 0; i < argc-1; i++)
            l[i].data = atoi(argv[i+1]);
        bubblesort(l, argc-2, compareListItems);
        for(int i = 0; i < argc-1; i++)
            cout << l[i].data << " ";
        cout << endl;
        free(l);
        return 0;
}


