
- •Міністерство освіти і науки україни курсовий проект
- •Розділ і. Алгоритми "швидкого сортування" та "сортування вибором"
- •1.1.Постановка Задачі
- •1.2. Суть алгоритму "Швидкого сортування"
- •1.3. Суть алгоритму "Сортування вибором"
- •В ікно форми
- •Головне меню
- •Функції “гарячих” кнопок
- •2.2. Основні компоненти середовища програмування
- •Компоненти сторiнки Standard
- •Компоненти сторінки Standard
- •Розділ III. Програмна реалізація алгоритм "швидкого сортування" та "сортування вибором"
- •3.1. Практичне використання методу "Швидкого сортування"
- •3.2. Практичне використання методу "Сортування вибором"
- •Висновки та пропозиції:
- •Список використаної літератури:
- •Додаток
Висновки та пропозиції:
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(); }
//--------------------------------------------------------------------------