Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сортування вибором та швидке сортування одновим...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
527.09 Кб
Скачать

Висновки та пропозиції:

1.1 Програмування містить цілу низку важливих внутрішніх задач. Однією з найбільш важливих таких задач для програмування є задача сортування. Під сортуванням звичайно розуміють перестановки елементів будь-якої послідовності у визначеному порядку. Ця задача є однією з найважливіших тому, що її метою є полегшення подальшої обробки певних даних і, насамперед, задачі пошуку

1.2 Час роботи алгоритму сортування залежить від збалансованості, що характеризує розбиття. Збалансованість, у свою чергу залежить від того, який елемент обрано як опорний (відносно якого елемента виконується розбиття). Якщо розбиття збалансоване, то асимптотично алгоритм працює так само швидко як і алгоритм сортування злиттям. У найгіршому випадку, асимптотична поведінка алгоритму настільки ж погана, як і в алгоритму сортування включенням.

1.3Сортування вибором не є складним в аналізі та порівнянні його з іншими алгоритмами, оскільки жоден з циклів не залежить від даних у списку. Знаходження найменшого елементу вимагає перегляду усіх n елементів (у цьому випадку n − 1 порівняння), і після цього, перестановки його до першої позиції. Знаходження наступного найменшого елементу вимагає перегляду n − 1 елементів, і так далі, для (n − 1) + (n − 2) + ... + 2 + 1 = n(n − 1) / 2 ∈ Θ(n2) порівнянь (дивіться арифметична прогресія). Кожне сканування вимагає однієї перестановки для n − 1 елементів (останній елемент знаходитиметься на своєму місці).

3.1 Сортування елементiв масиву здiйснюэться в чотири кроки:

1)Порiвнюємо всi елементи масиву A з опорним елементом .

2) 2)Вiдсортувавши елементи масиву на бiльшi i меншi вiд опорного елементу , обираємо в кожнiй з частин вiдсортованого масиву по одному опорному елементу.

3) Порiвнюємо елементи знову i вiдсортовуємо на бiльшi i меншi вiд опорного елементу.

4)Продовжуємо до поки масив не вiдсортується.

3.2 Сортування елементiв масиву здiйснюэться в два кроки:

1) 1)Знаходимо найменший елемент списку i мiняємо його з першим елементом.

2)Виключаємо перший елемент списку i продовжуємо ту ж операцiю з рештою елементiв, до поки список не завершиться.

3.3 Програмний продукт "Сортування одновимiрного масиву" призначений для сортування одновимiрного масиву двома способами: методом «Швидкого сортування», методом "Сортування вибором".

Список використаної літератури:

1)«С++. Теорія та практика» За ред. О. Г. Трофименко

2) «C++ Builder 6 Книга 2 Класи i компоненти» А.Я. Архангельський

3) «С++ Builder 6 Довiдковий Посiбник Книга 1 Мова C++»

А.Я. Архангельський

4) «ПРОГРАМУВАННЯ В C++ Builder 6» А.Я. Архангельський

5)Iнтенет джерело – Vikipedia (http://uk.wikipedia.org)

6)Iнтернет джерело - CyberForum (http://www.cyberforum.ru)

Додаток

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

#include <vcl.h>

#pragma hdrstop

#define N 10

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int i, A[N],min,j,t,r,z;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ Memo1 -> Clear();

Memo2 -> Clear();}

//-----------------Кнопка «Заповнити автоматично»-----------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{Memo1 -> Clear();

Memo2 -> Clear();

AnsiString Str;

for (i = 0; i <= N; i++)

{ A[i] = random(10) ;

Str += IntToStr (A [i])+ " " ;

}

Memo1 -> Lines -> Add(Str);}

//-----------------------Кнопка “Сортування вибором”------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{ AnsiString Str;

for(i=0;i<N;i++)

{min=A[i];

z=0;

for(j=i+1;j<N;j++)

{

if(min>A[j]){min=A[j];t=j;z++;}}

if(z==0) continue;

r=A[i];

A[i]=min;

A[t]=r;}

for (i = 0; i <= N; i++)

{Str += IntToStr(A[i])+ " " ;

}

Memo2 -> Lines -> Add(Str);}

//---------------------Кнопка “Очистити поля”--------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{Memo1->Clear();

Memo2->Clear();

Edit1->Clear();}

//---------------------Кнопка “Вихід”-------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{Close();}

//-----------------Кнопка “Швидке сортування”------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

const MAXSTACK=2048;

int size,i,j,p,temp;

size=N+1;

long lb, ub;

long lbstack[MAXSTACK], ubstack[MAXSTACK];

long stackpos = 1;

long ppos;

int pivot;

lbstack[1] = 0;

ubstack[1] = size-1;

do

{lb = lbstack[ stackpos ];

ub = ubstack[ stackpos ];

stackpos--;

do

{

ppos = ( lb + ub ) >> 1;

i = lb; j = ub; pivot = A[ppos];

do {

while ( A[i] < pivot ) i++;

while ( pivot < A[j] ) j--;

if ( i <= j ) {

temp = A[i]; A[i] = A[j]; A[j] = temp;

i++; j--;}

} while ( i <= j );

if ( i < ppos ) {

if ( i < ub ) {

stackpos++;

lbstack[ stackpos ] = i;

ubstack[ stackpos ] = ub;}

ub = j;}

else

{if ( j > lb )

{stackpos++;

lbstack[ stackpos ] = lb;

ubstack[ stackpos ] = j;

}

lb = i;

}

} while ( lb < ub );

} while ( stackpos != 0 );

for(i=0;i<size;i++)

Edit1->Text=Edit1->Text + " " + A[i]; }

//-----Кнопка в “MainMenu” → «Заповнити автоматично»---------

void __fastcall TForm1::N2Click(TObject *Sender)

{

Memo1 -> Clear();

Memo2 -> Clear();

AnsiString Str;

for (i = 0; i <= N; i++)

{A[i] = random(10) ;

Str += IntToStr (A [i])+ " " ;}

Memo1 -> Lines -> Add(Str);}

//--------------Кнопка в “MainMenu” → “Швидке сортування”---------------------

void __fastcall TForm1::N3Click(TObject *Sender)

{

const MAXSTACK=2048;

int size,i,j,p,temp;

size=N+1;

long lb, ub;

long lbstack[MAXSTACK], ubstack[MAXSTACK];

long stackpos = 1;

long ppos;

int pivot;

lbstack[1] = 0;

ubstack[1] = size-1;

do

{lb = lbstack[ stackpos ];

ub = ubstack[ stackpos ];

stackpos--;

do

{ppos = ( lb + ub ) >> 1;

i = lb; j = ub; pivot = A[ppos];

do {

while ( A[i] < pivot ) i++;

while ( pivot < A[j] ) j--;

if ( i <= j ) {

temp = A[i]; A[i] = A[j]; A[j] = temp;

i++; j--;

}

} while ( i <= j );

if ( i < ppos ) {

if ( i < ub ) {

stackpos++;

lbstack[ stackpos ] = i;

ubstack[ stackpos ] = ub;}

ub = j;}

else

{if ( j > lb )

{stackpos++;

lbstack[ stackpos ] = lb;

ubstack[ stackpos ] = j;

}

lb = i;

}

} while ( lb < ub );

} while ( stackpos != 0 );

for(i=0;i<size;i++)

Edit1->Text=Edit1->Text + " " + A[i];}

//-----------Кнопка в “MainMenu” → “Сортування вибором”--------------------------

void __fastcall TForm1::N4Click(TObject *Sender)

{ AnsiString Str;

for(i=0;i<N;i++)

{ min=A[i];

z=0;

for(j=i+1;j<N;j++)

{if(min>A[j]){min=A[j];t=j;z++;}}

if(z==0) continue;

r=A[i];

A[i]=min;

A[t]=r;}

for (i = 0; i <= N; i++)

{ Str += IntToStr(A[i])+ " " ;

} Memo2 -> Lines -> Add(Str);}

//--------------Кнопка в “MainMenu” → ”Очистити поля”-------------------------

void __fastcall TForm1::N7Click(TObject *Sender)

{ Memo1->Clear();

Memo2->Clear();

Edit1->Clear();}

//----------------Кнопка в “MainMenu” → ”Вихід”----------------------

void __fastcall TForm1::N8Click(TObject *Sender)

{Close(); }

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