Text: |
ФІО = GVA
Запитання:/*
Тема: Методи сортування
Завдання: Розробити програму сортування методом "сортування злиттям". Програма повинна забезпечувати введення чи генерацію вихідних даних і візуалізувати результати сортування.
*/
#include <iostream>
#include <stdio.h>
#define N 10
using namespace std;
void autoentermas(int a[], size_t length) {
randomize();
for (int i = 0 ; i < length ; i++)
{
a[i] = rand() % 40;
}
return ;
}
void printmas(int a[], size_t length) {
for (int i = 0 ; i < length ; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return ;
}
void Merge(int Mas[], int left, int right, int medium)
{
int j = left;
int k = medium + 1;
int count = right - left + 1;
if (count <= 1) return;
int *TmpMas = new int[count];
for (int i = 0; i < count; i++)
{
if (j <= medium && k <= right)
{
if (Mas[j] < Mas[k])
TmpMas[i] = Mas[j++];
else
TmpMas[i] = Mas[k++];
}
else
{
if (j <= medium)
TmpMas[i] = Mas[j++];
else
TmpMas[i] = Mas[k++];
}
}
j = 0;
for (int i = left; i <= right; i++)
{
Mas[i] = TmpMas[j++];
}
delete[] TmpMas;
}
template <typename Item>
void MergeSort(Item a[], int l, int r,int realcount)
{
int m;
// Условие выхода из рекурсии
if(l >= r) return;
m = (l + r) / 2;
// Рекурсивная сортировка полученных массивов
MergeSort(a, l, m,realcount);
MergeSort(a, m + 1, r,realcount);
Merge(a, l, r, m);
printmas(a,realcount);
}
int main(){
int mas[N];
autoentermas(mas, N);
cout<<"CURRENT -> "; printmas(mas,N);
MergeSort(mas,0,N,N);
cout<<"RESULT -> "; printmas(mas,N);
system("pause");
return 0;
}
====================================
|