- •Загальні положення
- •1.1 Мета роботи
- •1.2 Методичні вказівки до організації самостійної роботи студентів
- •1.2.2 Структура програми
- •If (а) оператор 1 ;
- •1.3 Контрольні запитання
- •1.4 Варіанти індивідуальних завдань
- •2 Розв’язання задач з використанням масивів
- •2.1 Мета роботи
- •2.2 Методичні вказівки до організації самостійної роботи студентів
- •Приклад 2.1 Знайти у масиві mas найменший елемент та його індекс.
- •Приклад 2.2Відсортувати масив mas дійсних чисел розміром 10 елементів за зменшенням.
- •2.3 Контрольні запитання а завдання
- •3.4 Варіанти індивідуальних завдань
- •3Робота з рядками
- •3.1 Мета роботи
- •3.2 Методичні вказівки до організації самостійної роботи студентів
- •3.3 Контрольні запитання та завдання
- •4Робота зі структурами
- •4.1 Мета роботи
- •4.2 Методичні вказівки до організації самостійної роботи студентів
- •4.3 Контрольні запитання та завдання
- •4.4 Варіанти індивідуальних завдань
- •5Використання функцій при розробці програм
- •5.1 Мета роботи
- •5.2 Методичні вказівки по організації самостійної роботи студентів
- •5.3 Контрольні запитання та завдання
- •5.4 Варіанти індивідуальних завдань
- •6 Пространства имен (поименованные области)
- •6.1 Мета роботи
- •6.2 Вказівки щодо організації самостійної роботи студентів
- •6.3 Порядок виконання роботи
- •2.7 Контрольний приклад
- •7 Пошук і сортування
- •7.1 Мета роботи
- •7.2 Методичні вказівки до організації самостійної роботи студентів
- •7.2.1 Лінійний пошук
- •7.2.2 Пошук розподілом навпіл (двійковий пошук)
- •7.2.3 Сортування вставками
- •7.2.4 Метод пухирця
- •7.2.5 Сортування перерахуванням
- •7.2.6 Швидке сортування
- •7.2.7 Сортування злиттям
- •7.3 Контрольні запитання
- •Перелік посилань
7.2.3 Сортування вставками
Нехай
потрібно упорядкувати масив
за зростанням пропонується використовувати
наступний підхід: для
,
кожен елемент
будемо вставляти в потрібне місце серед
упорядкованих раніше елементів
,
розсовуючи їх за рахунок видалення
.
Цей метод у явному виді рідко
використовується на практиці, однак
покладена в його основу ідея добре
працює, коли потрібно вставити новий
елемент у вже упорядкований масив.
7.2.4 Метод пухирця
Ідея
методу полягає в упорядкуванні всіх
пар сусідніх елементів. Масив
проглядається зліва направо і, якщо xi
> xi+1
(i=1…n-1), то вони міняються місцями. При
цьому i-й елемент (крім першого й
останнього) бере участь у двох порівняннях,
а це значить, що максимальний елемент
масиву буде переміщатися («спливати»)
до правого кінця масиву і до кінця
проходу виявиться останнім. За наступний
прохід «спливе» другий по величині
елемент і т.д., поки всі елементи не
займуть свої місця. Очевидно, для цього
буде потрібно не більш n-1 проходів.
7.2.5 Сортування перерахуванням
Для кожного елемента масиву X(n) вважаємо, скільки елементів менше його, тобто фактично знаходимо його положення в упорядкованому масиві. Для збереження цієї інформації можна використовувати масив лічильників C(n). Тоді значення Сi+1 визначає положення елемента xi у результуючому відсортованому масиві R(n).
7.2.6 Швидке сортування
Цей алгоритм одержав широке поширення в багатьох прикладних програмах. Однак ефективність його використання істотно залежить від числа елементів сортуемого масиву, а також характеру розподілу цих даних. Отже:
—
вибирається
який–небудь елемент (x) (звичайно
знаходиться в середині послідовності).
Будемо переглядати масив ліворуч доти,
поки не знайдемо елемент аi>x,
потім будемо переглядати масив праворуч,
поки не зустрінеться аj<x.
Тепер поміняємо місцями ці два елементи
і продовжимо наш процес перегляду й
обміну, поки обидва перегляди не
зустрінуться десь у середині масиву
(значення i та j рівні). У результаті
виявиться, що масив розбито на дві
половини із ключами, меншими або рівними
x, і більшими або рівними x, а сам елемент
x буде знаходитися в необхідному місці;![]()
— ітераційно повторюємо процес 1 для кожної з отриманих половин (у перший раз одержимо чотири піддіапазону вихідної послідовності) доти, поки значення індексів для кожного вкладеного діапазону чи будуть рівні, чи змінять відношення. У результаті ми одержимо упорядковану послідовність.
7.2.7 Сортування злиттям
Це алгоритм об'єднання двох відсортованих масивів в один. Розглянемо два відсортованих по неубуванню масиву X(n) і Y(m). Нехай необхідно об'єднати їх в один масив Z(n+m), також упорядкований. Вирішимо цю задачу в такий спосіб: з кожної пари мінімальних елементів масивів X і Y (починаючи з x1 і y1) вибираємо найменший і записуємо його в Z, а в масиві, з якого був узятий цей елемент, збільшуємо на одиницю індекс наступного, ще не розглянутого елемента. Так продовжуємо, поки один з масивів не вичерпається. Якщо першим вичерпався масив X, то залишок Y цілком переписуємо в Z, якщо першим вичерпався Y, то в Z переписуємо залишок X .
Приклад 7 Реалізація методу “швидкого” сортування
#include<iostream.h>
#include<stdio.h>
#define b=16
int n=6;
int a[6];
int i,j,l,r=6;
void swap(int*,int*);
void quicksort(int,int);
void part(int,int,int&,int&);
int main()
{ for(int k=1;k<=n; k++)
{cout << "input а["<<k<<"] of massive \n";
cin >> a[k]; }
quicksort(1,n); // вызов функции быстрой сортировки
for(k=1; k<=n; k++)
{printf("a[ %d ]= %d \n",k,a[k]);}
cin>>k;
return 0;
}
void swap(int* p,int* q)
{ int prom;
prom=*p;
*p=*q;
*q=prom; }
void quicksort(int l,int r) // функция быстрой сортировки
{ int i,j; i=l; j=r;
{ part(l,r, i, j);
if(i<r) quicksort(i,r); // переход к сортировке слева
if(j>l) quicksort(l,j); } // переход к сортировке справа
}
void part(int l,int r,int &i,int &j)
{ int x ; i=l; j=r; x=(l+r)/2;
do { while (a[i]<a[x]) i++; //просмотр: найдём a[j]> a[x]
while(a[j]>a[x]) j--; //просмотр: найдём a[j]< a[x], меняем местами
if(i<=j)
{ swap(&a[i],&a[j]); // обмен этих элементов
i++;j--; }
} while(i<j); }
