Pagini recente » Cod sursa (job #2207410) | Cod sursa (job #2752305) | Cod sursa (job #1608864) | Cod sursa (job #2737174) | Cod sursa (job #1785070)
#include <iostream>
#include <fstream>
const int MAX = 500000;
// v[left...mid] interclasat cu v[mid+1 ... right]
void mergeSubarrays(int v[], int left, int mid, int right){
int res[MAX];
int i = left, j = mid + 1, k = 0;
while(i <= mid && j <= right){
if(v[i] < v[j]){
res[k++] = v[i];
i++;
}else{
res[k++] = v[j];
j++;
}
}
if(i <= mid){
for(; i <= mid; i++){
res[k++] = v[i];
}
}else if(j <= right){
for(; j <= right; j++){
res[k++] = v[j];
}
}
for(i = 0; i < k; i++){
v[left + i] = res[i];
}
}
void mergeSort(int v[], int left, int right){
if(left < right){
int mid = (left + right) / 2;
mergeSort(v, left, mid);
mergeSort(v, mid + 1, right);
mergeSubarrays(v, left, mid, right);
}
}
int main(){
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
int n, v[MAX];
fin >> n;
for(int i = 0; i < n; i++){
fin >> v[i];
}
mergeSort(v, 0, n - 1);
for(int i = 0; i < n; i++){
fout << v[i] << " ";
}
fin.close();
fout.close();
return 0;
}