Pagini recente » Cod sursa (job #364157) | Cod sursa (job #839709) | Cod sursa (job #2830826) | Cod sursa (job #676456) | Cod sursa (job #1092877)
// Include
#include <fstream>
#include <cstring>
using namespace std;
// Constante
const int sz = 1001;
// Functii
void mergeSort(int left, int right);
// Variabile
ifstream in("algsort.in");
ofstream out("algsort.out");
int num;
int values[sz];
// Main
int main()
{
in >> num;
for(int i=1 ; i<=num ; ++i)
in >> values[i];
mergeSort(1, num);
for(int i=1 ; i<=num ; ++i)
out << values[i] << ' ';
in.close();
out.close();
return 0;
}
void mergeSort(int left, int right)
{
if(left == right)
return;
if(right - left == 1)
{
if(values[right] < values[left])
swap(values[left], values[right]);
return;
}
int mid = (left+right) / 2;
mergeSort(left, mid);
mergeSort(mid+1, right);
int left1 = left;
int right1 = mid;
int left2 = mid+1;
int right2 = right;
int pos = left-1;
int temp[sz];
memset(temp, 0, sizeof(temp));
while(left1 <= right1 && left2 <= right2)
{
if(values[left1] <= values[left2])
temp[++pos] = values[left1++];
else
temp[++pos] = values[left2++];
}
while(left1 <= right1)
temp[++pos] = values[left1++];
while(left2 <= right2)
temp[++pos] = values[left2++];
for(int i=left ; i<=right ; ++i)
values[i] = temp[i];
}