#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
template<class T>
void Sort(T a[], long lb, long ub)
{
long splitter;
if (lb < ub) {
splitter = (lb + ub)/2;
Sort(a, lb, splitter);
Sort(a, splitter+1, ub);
//слияние результатов в общий массив
merge(a, lb, splitter, ub);
}
}
template<class T>
void merge(T a[], long lb, long split, long ub)
{
long pos1=lb;
long pos2=split+1;
long pos3=0;
T *temp = new T[ub-lb+1];
while (pos1 <= split && pos2 <= ub)
{
if (a[pos1] < a[pos2])
temp[pos3++] = a[pos1++];
else
temp[pos3++] = a[pos2++];
}
while (pos2 <= ub)
temp[pos3++] = a[pos2++];
while (pos1 <= split)
temp[pos3++] = a[pos1++];
for (pos3 = 0; pos3 < ub-lb+1; pos3++)
a[lb+pos3] = temp[pos3];
delete[] temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
int size;
cout<<"Input size of array"<<endl;
cin>>size;
int *mass = new int[size];
for(int i = 0;i<size;++i)
mass = rand() % 100;
cout<<endl;
cout<<"\tArray"<<endl;
for(int i = 0;i<size;++i)
cout<<mass<<' ';
Sort(mass,0,size-1);
cout<<endl;
cout<<"\tArray after sorting"<<endl;
for(int i = 0;i<size;++i)
cout<<mass<<' ';
cout<<endl;
delete[] mass;
return 0;
}
(С++) Прямое слияние
Ни у кого этого метода на C++\C нету случайно? Алгоритм немного знаю, но реализовать проблемно...
Требуется только код сортировки методом прямого слияния на C\C++.
Видели всё это... не то, то что на паскале - то, но надо на Си!
Цитата: demonoide
Видели всё это... не то, то что на паскале - то, но надо на Си!
Так на С или С++? Разные вещи, собственно.
Всё равно, и так и так пойму! Ну раз я написал в сабже на С++, значит лучше на С++.
Цитата: demonoide
Ни у кого этого метода на C++\C нету случайно? Алгоритм немного знаю, но реализовать проблемно...
Требуется только код сортировки методом прямого слияния на C\C++.
Требуется только код сортировки методом прямого слияния на C\C++.
Если нужен только код вот в Visual Studio 2003:
Код:
Если алгоритм знаешь - разберешься.
СПАСИБО!!!!!!!!!!!!!!!!