//#define Custom_Sorting

/*

 

            Åñëè Custom_Sorting íå îïðåäåëåíà, èñïîëüçóåòñÿ âñòðîåíàÿ ôóíêöèÿ

            ñîðòèðîâêè, â ïðîòèâíîì ñëó÷àå - èñêóññòâåííàÿ

*/

 

 

 

#include "stdlib.h"

#include "iostream.h"

#include "memory.h"

 

// Ìàêñèìàëüíûé ðàçìåð ìàññèâà

#define ARRAY_LENGTH 10

 

// Òèï ñîðòèðóåìûõ ýëåìåíòîâ

typedef int ElementType;

 

// Ìàññèâ äëÿ ñîðòèðîâêè

ElementType Array[ARRAY_LENGTH];

 

// Ôóíêöèÿ ãåíåðàöèè ìàññèâà

void GenerateArray( ElementType* arr)

{

            for( int i=0; i<ARRAY_LENGTH; i++)

            {

                        arr[i] = rand();

            }

}

 

// Ôóíêöèÿ ðàñïå÷àòêè ìàññèâà

void PrintArray( ElementType* arr)

{

            if (ARRAY_LENGTH <= 0)

            {

                        cout << "\n Empty array";

                        return;

            }

            cout << "\n Array: " << arr[0];

            for( int i = 1; i < ARRAY_LENGTH; i++)

            {

                        cout << " -> " << arr[i];

            }

 

};

 

#ifdef Custom_Sorting

// èñêóññòâåííàÿ ôóíêöèÿ ñîðòèðîâêè

void SortArray( ElementType* arr)

{

            ElementType tmp_val;

            for( int i = 0; i < ARRAY_LENGTH; i++)

                        for( int j = 0; j < ARRAY_LENGTH; j++)

                        {

                                    if( arr[i] < arr[j])

                                    {

                                                tmp_val = arr[i];

                                                arr[i] = arr[j];

                                                arr[j] = tmp_val;

                                    }

                        }

};

 

#else

// âñòðîåííàÿ ôóíêöèÿ ñîðòèðîâêè

 

int CompareFunction( const void* E1, const void* E2)

{

            ElementType Val1;

            ElementType Val2;

            memcpy( &Val1, E1, sizeof( ElementType));

            memcpy( &Val2, E2, sizeof( ElementType));

 

            if( Val1  < Val2)

            {

                        return -1;

            }else

            {

                        return 1;

            }

}

 

void SortArray( ElementType* arr)

{

            qsort( arr, ARRAY_LENGTH, sizeof(ElementType), CompareFunction);

}

 

#endif

 

void main( void)

{

            GenerateArray ( Array);

            PrintArray( Array);

            SortArray( Array);

            PrintArray( Array);

}