Четверг, 25.04.2024, 10:45
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Форма входа
ДРУЗЬЯ САЙТА

Вызвать мастера в Красноярске

8 983 207 5474

8 902 918 9334

8 933 332 3164

---------------------------------

Запчасти бытткхники

  • Велес т.2935600
  • СЦ Близнецов т.2296595
  • Вираж
  • Красраб 110 т.2589503
  • Комплекстур Щорса30 т.2606797
  • Радиодетали

  • Якорный 9 т.2688317
  • Воронова 16 т.2202990
  • Красраб 125а т.2456544
  • Профи т.2702737
  • Дайте две т.+79237713323
  • Электрика

  • Электро +
  • Планета электрика
  • ЗАКЛАДКИ
    Поиск
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Главная » Статьи » C++ Builder » Простые примеры

    C++ Builder XE пирамидальная сортировка

    C++ Builder XE пирамидальная сортировка

    ==

    ==

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void TForm1::iswap(int &n1, int &n2)
    {
     int temp = n1;
        n1 = n2;
        n2 = temp;
    }
    //-----------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
                    for (int i=0;i < n ;i++) a[i]= random(65);

                    Edit1->Text="";

                    for (int i=0;i<n;i++)  {

                             Edit1->Text= Edit1->Text + IntToStr( a[i] )+",";

                             }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
         int sh = 0; //смещение

            bool b = false;

        for(;;)
        {
            b = false;
            for ( int i = 0; i < n; i++ )
            {
                if( i * 2 + 2 + sh < n )
                {
                    if( ( a[i + sh] > /*<*/ a[i * 2 + 1 + sh] ) || ( a[i + sh] > /*<*/ a[i * 2 + 2 + sh] ) )
                    {
                        if ( a[i * 2 + 1 + sh] < /*>*/ a[i * 2 + 2 + sh] )
                        {
                            iswap( a[i + sh], a[i * 2 + 1 + sh] );
                            b = true;
                        }
                        else if ( a[i * 2 + 2 + sh] < /*>*/ a[ i * 2 + 1 + sh])
                             {
                                 iswap( a[ i + sh], a[i * 2 + 2 + sh]);
                                 b = true;
                             }
                    }
                    //дополнительная проверка для последних двух элементов
                   //с помощью этой проверки можно отсортировать пирамиду
                   //состоящую всего лишь из трех жлементов
                        if( a[i*2 + 2 + sh] < /*>*/ a[i*2 + 1 + sh] )
                            {
                            iswap( a[i*2+1+sh], a[i * 2 +2+ sh] );
                            b = true;
                            }
                }
                else if( i * 2 + 1 + sh < n )
                     {
                         if( a[i + sh] > /*<*/ a[ i * 2 + 1 + sh] )
                         {
                             iswap( a[i + sh], a[i * 2 + 1 + sh] );
                             b = true;
                         }
                     }
            }


            if (!b) sh++; //смещение увеличивается, когда на текущем этапе
                          //сортировать больше нечего

            if ( sh + 2 == n ) break;
        }  //конец сортировки

                         Edit1->Text="";

                   for (int i=0;i<n;i++)  {

                               Edit1->Text= Edit1->Text + IntToStr( a[i] )+",";

                               }

    }
    //---------------------------------------------------------------------------

    ==

    //---------------------------------------------------------------------------

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
        TEdit *Edit1;
        TButton *Button1;
        TButton *Button2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
    private:    // User declarations
    public:        // User declarations
          static const int n = 30;
          int a[n];
          void iswap(int &n1, int &n2);
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

     

    ==

    Категория: Простые примеры | Добавил: doka (22.05.2017)
    Просмотров: 1107 | Рейтинг: 0.0/0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]