// Sortowanie przez scalanie
//--------------------------------------------------------
// (C)2012 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------------------------------------
#include <cmath>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
const int N = 20; // Liczebność zbioru.
int d[N],p[N];
// Procedura sortująca
//--------------------
void MergeSort(int i_p, int i_k)
{
int i_s,i1,i2,i;
i_s = (i_p + i_k + 1) / 2;
if(i_s - i_p > 1) MergeSort(i_p, i_s - 1);
if(i_k - i_s > 0) MergeSort(i_s, i_k);
i1 = i_p; i2 = i_s;
for(i = i_p; i <= i_k; i++)
p[i] = ((i1 == i_s) || ((i2 <= i_k) && (d[i1] > d[i2]))) ? d[i2++] : d[i1++];
for(i = i_p; i <= i_k; i++) d[i] = p[i];
}
// Program główny
//---------------
int main()
{
int i;
cout << " Sortowanie przez scalanie\n"
"---------------------------\n"
" (C)2005 Jerzy Walaszek\n\n"
"Przed sortowaniem:\n\n";
// Najpierw wypełniamy tablicę d[] liczbami pseudolosowymi
// a następnie wyświetlamy jej zawartość
srand((unsigned)time(NULL));
for(i = 0; i < N; i++) d[i] = rand() % 100;
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
// Sortujemy
MergeSort(0,N-1);
// Wyświetlamy wynik sortowania
cout << "Po sortowaniu:\n\n";
for(i = 0; i < N; i++) cout << setw(4) << d[i];
cout << endl;
return 0;
}
Ly8gU29ydG93YW5pZSBwcnpleiBzY2FsYW5pZQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIChDKTIwMTIgbWdyIEplcnp5IFdhxYJhc3plawovLyBJIExpY2V1bSBPZ8OzbG5va3N6dGHFgmPEhWNlCi8vIGltLiBLLiBCcm9kemnFhHNraWVnbwovLyB3IFRhcm5vd2llCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDx0aW1lLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAyMDsgLy8gTGljemVibm/Fm8SHIHpiaW9ydS4KCmludCBkW05dLHBbTl07CgovLyBQcm9jZWR1cmEgc29ydHVqxIVjYQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tCgp2b2lkIE1lcmdlU29ydChpbnQgaV9wLCBpbnQgaV9rKQp7CiAgaW50IGlfcyxpMSxpMixpOwoKICBpX3MgPSAoaV9wICsgaV9rICsgMSkgLyAyOwogIGlmKGlfcyAtIGlfcCA+IDEpIE1lcmdlU29ydChpX3AsIGlfcyAtIDEpOwogIGlmKGlfayAtIGlfcyA+IDApIE1lcmdlU29ydChpX3MsIGlfayk7CiAgaTEgPSBpX3A7IGkyID0gaV9zOwogIGZvcihpID0gaV9wOyBpIDw9IGlfazsgaSsrKQogICAgcFtpXSA9ICgoaTEgPT0gaV9zKSB8fCAoKGkyIDw9IGlfaykgJiYgKGRbaTFdID4gZFtpMl0pKSkgPyBkW2kyKytdIDogZFtpMSsrXTsKICBmb3IoaSA9IGlfcDsgaSA8PSBpX2s7IGkrKykgZFtpXSA9IHBbaV07Cn0KCi8vIFByb2dyYW0gZ8WCw7N3bnkKLy8tLS0tLS0tLS0tLS0tLS0KCmludCBtYWluKCkKewogIGludCBpOwogIAogIGNvdXQgPDwgIiBTb3J0b3dhbmllIHByemV6IHNjYWxhbmllXG4iCiAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgICAiICAoQykyMDA1ICBKZXJ6eSBXYWxhc3pla1xuXG4iCiAgICAgICAgICAiUHJ6ZWQgc29ydG93YW5pZW06XG5cbiI7CgovLyBOYWpwaWVydyB3eXBlxYJuaWFteSB0YWJsaWPEmSBkW10gbGljemJhbWkgcHNldWRvbG9zb3d5bWkKLy8gYSBuYXN0xJlwbmllIHd5xZt3aWV0bGFteSBqZWogemF3YXJ0b8WbxIcKCiAgc3JhbmQoKHVuc2lnbmVkKXRpbWUoTlVMTCkpOwoKICBmb3IoaSA9IDA7IGkgPCBOOyBpKyspIGRbaV0gPSByYW5kKCkgJSAxMDA7CiAgZm9yKGkgPSAwOyBpIDwgTjsgaSsrKSBjb3V0IDw8IHNldHcoNCkgPDwgZFtpXTsKICBjb3V0IDw8IGVuZGw7CgovLyBTb3J0dWplbXkKCiAgTWVyZ2VTb3J0KDAsTi0xKTsKICAKLy8gV3nFm3dpZXRsYW15IHd5bmlrIHNvcnRvd2FuaWEKCiAgY291dCA8PCAiUG8gc29ydG93YW5pdTpcblxuIjsKICBmb3IoaSA9IDA7IGkgPCBOOyBpKyspIGNvdXQgPDwgc2V0dyg0KSA8PCBkW2ldOwogIGNvdXQgPDwgZW5kbDsKICByZXR1cm4gMDsKfSA=