- •Загальні положення
- •Розв’язання задач з простою змінною
- •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 Вказівки щодо організації самостійної роботи студентів
- •Общие требования.
- •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.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&);
void 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; }
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); }
7.3 Контрольні запитання
Як змінити алгоритм пошуку найбільшого з уведених чисел, щоб він знаходив найменше число ?
Запропонуйте алгоритм не двоїчного, а троїчного пошуку.
Що потрібно змінити в алгоритмі обмінного сортування, щоб першими займали свої місця не великі числа, а маленькі ?
Поліпшите алгоритм обмінного сортування так, щоб робота припинялася, якщо проходження масиву не викликало жодного обміну.
Розробіть алгоритм злиття масивів a і b з упорядкованими ділянками довжини d.
Розробіть алгоритм злиття двох масивів з упорядкованими ділянками довільної довжини. Як визначити кінець упорядкованої ділянки?
Чи зміниться складність алгоритму злиття, якщо зливати не по два, а по три масива?
Варіанти індивідуальних завдань
Реалізуйте на практиці 2 алгоритми пошуку та 2 алгоритми сортування. Результати порівняйте.
ПЕРЕЛІК ПОСИЛАНЬ
Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. — М.: Финансы и статистика, 1992. — 272 с.
Страуструп Б. Язык программирования С++. Часть 1. — Киев: "ДиаСофт", 1993. — 264 с.
Страуструп Б. Язык программирования С++. Часть 2. — Киев: "ДиаСофт", 1993. — 296 с.
Подбельский В.В. Язык Си+: Учеб. пособие. — М.: БИНОМ, 1995. — 400 с.
Глушаков С.В. и др. Язык программирования С++. —Харьков: Фолио, 2002. — 500 с.
Х.М.Дейтел, П.Дж. Дейтел Как программировать на С++.- М.:ЗАО «Издательство БИНОМ», 2000 г. — 1024 с.
Ван Тассел Д. Стиль, разработка, отладка и испытание программ.-M.:Мир,1985.
Проценко В.С. Техніка програмування мовою С. —Навч. Посібник. –К.:Либідь, 1993. — 224с.
Жешке Р. Толковый словарь стандарта языка Си: — С.-Петербург: Питер, 1994. — 221с.
Язык Си. Книга ответов: Пер. с англ. — М.: Финансы и статистика, 1994. — 160 с.
