Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_ukazania_k_8_9_10_11_12_zadaniam.doc
Скачиваний:
9
Добавлен:
03.05.2019
Размер:
619.01 Кб
Скачать

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 Контрольні запитання

  1. Як змінити алгоритм пошуку найбільшого з уведених чисел, щоб він знаходив найменше число ?

  2. Запропонуйте алгоритм не двоїчного, а троїчного пошуку.

  3. Що потрібно змінити в алгоритмі обмінного сортування, щоб першими займали свої місця не великі числа, а маленькі ?

  4. Поліпшите алгоритм обмінного сортування так, щоб робота припинялася, якщо проходження масиву не викликало жодного обміну.

  5. Розробіть алгоритм злиття масивів a і b з упорядкованими ділянками довжини d.

  6. Розробіть алгоритм злиття двох масивів з упорядкованими ділянками довільної довжини. Як визначити кінець упорядкованої ділянки?

  7. Чи зміниться складність алгоритму злиття, якщо зливати не по два, а по три масива?

    1. Варіанти індивідуальних завдань

Реалізуйте на практиці 2 алгоритми пошуку та 2 алгоритми сортування. Результати порівняйте.

ПЕРЕЛІК ПОСИЛАНЬ

  1. Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. — М.: Финансы и статистика, 1992. — 272 с.

  2. Страуструп Б. Язык программирования С++. Часть 1. — Киев: "ДиаСофт", 1993. — 264 с.

  3. Страуструп Б. Язык программирования С++. Часть 2. — Киев: "ДиаСофт", 1993. — 296 с.

  4. Подбельский В.В. Язык Си+: Учеб. пособие. — М.: БИНОМ, 1995. — 400 с.

  5. Глушаков С.В. и др. Язык программирования С++. —Харьков: Фолио, 2002. — 500 с.

  6. Х.М.Дейтел, П.Дж. Дейтел Как программировать на С++.- М.:ЗАО «Издательство БИНОМ», 2000 г. — 1024 с.

  7. Ван Тассел Д. Стиль, разработка, отладка и испытание программ.-M.:Мир,1985.

  8. Проценко В.С. Техніка програмування мовою С. —Навч. Посібник. –К.:Либідь, 1993. — 224с.

  9. Жешке Р. Толковый словарь стандарта языка Си: — С.-Петербург: Питер, 1994. — 221с.

  10. Язык Си. Книга ответов: Пер. с англ. — М.: Финансы и статистика, 1994. — 160 с.

54

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]