Pagini recente » Cod sursa (job #2361138) | Cod sursa (job #1248048) | Cod sursa (job #2107050) | Cod sursa (job #1094776) | Cod sursa (job #2693446)
#include <fstream>
#define nmax 500001
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
void merge(int arr[], int low, int mid, int high){
int elementsFirstVector = mid - low + 1, elementsSecondVector = high - mid;
int firstVector[elementsFirstVector], secondVector[elementsSecondVector];
for(int i = 0; i < elementsFirstVector; ++i){
firstVector[i] = arr[low + i];
}
for(int i = 0; i < elementsSecondVector; ++i){
secondVector[i] = arr[mid + i + 1];
}
int indexFirstVector = 0, indexSecondVector = 0, indexMerge = low;
while(indexFirstVector < elementsFirstVector && indexSecondVector < elementsSecondVector){
if(firstVector[indexFirstVector] <= secondVector[indexSecondVector]){
arr[indexMerge] = firstVector[indexFirstVector];
indexFirstVector++;
}
else{
arr[indexMerge] = secondVector[indexSecondVector];
indexSecondVector++;
}
indexMerge++;
}
while(indexFirstVector < elementsFirstVector){
arr[indexMerge] = firstVector[indexFirstVector];
indexFirstVector++;
indexMerge++;
}
while(indexSecondVector < elementsSecondVector){
arr[indexMerge] = secondVector[indexSecondVector];
indexSecondVector++;
indexMerge++;
}
}
void mergeSort(int arr[], int low, int high){
if(low >= high){
return;
}
int mid = (low + high - 1) / 2;
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
int main(){
int arr[nmax], numbers;
cin >> numbers;
for(int i = 1; i <= numbers; ++i){
cin >> arr[i];
}
mergeSort(arr, 1, numbers);
for(int i = 1; i <= numbers; ++i){
cout << arr[i] << " ";
}
return 0;
}