Pagini recente » Cod sursa (job #2628013) | Cod sursa (job #2322651)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
void interclass(int s[], int first1, int last1, int first2, int last2)
{
int *b = new int[last2 - first1 + 1];
int i = first1, j = first2, k = 0;
while(i <= last1 && j <= last2)
if(s[i] < s[j])
b[k++] = s[i++];
else
b[k++] = s[j++];
while(i <= last1)
b[k++] = s[i++];
while(j <= last2)
b[k++] = s[j++];
for(int t = 0; t < k; t++)
s[t + first1] = b[t];
delete b;
return;
}
void merge_sort(int s[], const int &first, const int &last)
{
if(last - first <= 1)
{
if(s[last] < s[first])
{
int temp = s[first];
s[first] = s[last];
s[last] = temp;
}
return;
}
int middle = (first + last) / 2;
merge_sort(s, first, middle);
merge_sort(s, middle + 1, last);
interclass(s, first, middle, middle + 1, last);
return;
}
int main()
{
int N;
fin >> N;
int *A = new int[500000];
for(int i = 0; i < N; i++)
fin >> A[i];
merge_sort(A, 0, N-1);
for(int i = 0; i < N; i++)
fout << A[i] << ' ';
delete A;
fin.close();
fout.close();
return 0;
}