#include <iostream>
#include <string>
#include <math.h>

using namespace std;

struct Punkt
  {
   double x,y;
   Punkt():x(0),y(0) {}
   Punkt(double x,double y):x(x),y(y) {}
   bool operator>(const Punkt &P)const;
  };

bool Punkt::operator>(const Punkt &P)const
  {
   return sqrt(x*x+y*y)>sqrt(P.x*P.x+P.y*P.y);
  }

ostream &operator<<(ostream &s,const Punkt &P)
  {
   return s<<'('<<P.x<<','<<P.y<<')';
  }

template <class T> T Min(T A,T B)
  {
   return A<B?A:B;
  }

template <class Typ> void Sortuj(Typ T[],unsigned R)
  {
   for(unsigned n=R;n>0;--n)
     {
      bool F=true;
      for(unsigned i=1;i<n;++i)
        {
         if(T[i-1]>T[i])
           {
            Typ Tmp=T[i-1];
            T[i-1]=T[i];
            T[i]=Tmp;
            F=false;
           }
        }
      if(F) break;
     }
  }

template <class Typ> void Drukuj(const Typ T[],unsigned R)
  {
   cout<<'{';
   for(unsigned i=0;i<R;++i)
     {
      if(i) cout<<',';
      cout<<T[i];
     }
   cout<<'}';
  }

int main()
  {
   double A[]={4.4,5.5,3.3,0.0,-1.1,2.2};
   int B[]={9,7,3,1,2,6,5,4,8};
   string C[4];
   C[0]="Bozena";
   C[1]="Maciej";
   C[2]="Piotr";
   C[3]="Anna";
   Punkt D[]={Punkt(5,6),Punkt(4,5),Punkt(3,4),Punkt(2,3),Punkt(1,2)};

   cout<<"A=";
   Drukuj(A,sizeof(A)/sizeof(*A));
   cout<<endl;
   Sortuj(A,sizeof(A)/sizeof(*A));
   cout<<"A=";
   Drukuj(A,sizeof(A)/sizeof(*A));
   cout<<endl;

   cout<<"B=";
   Drukuj(B,sizeof(B)/sizeof(*B));
   cout<<endl;
   Sortuj(B,sizeof(B)/sizeof(*B));
   cout<<"B=";
   Drukuj(B,sizeof(B)/sizeof(*B));
   cout<<endl;

   cout<<"C=";
   Drukuj(C,sizeof(C)/sizeof(*C));
   cout<<endl;
   Sortuj(C,sizeof(C)/sizeof(*C));
   cout<<"C=";
   Drukuj(C,sizeof(C)/sizeof(*C));
   cout<<endl;

   cout<<"D=";
   Drukuj(D,sizeof(D)/sizeof(*D));
   cout<<endl;
   Sortuj(D,sizeof(D)/sizeof(*D));
   cout<<"D=";
   Drukuj(D,sizeof(D)/sizeof(*D));
   cout<<endl;

   cin.get();
   return 0;
  }

