Pagini recente » Cod sursa (job #2286978) | Cod sursa (job #2574495) | Cod sursa (job #3194664) | Cod sursa (job #143839) | Cod sursa (job #3211136)
#include <iostream>
#include <vector>
void merge(int arr[], int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
// Create temporary arrays
std::vector<int> left_arr(n1), right_arr(n2);
// Copy data to temporary arrays left_arr[] and right_arr[]
for (int i = 0; i < n1; i++)
left_arr[i] = arr[left + i];
for (int j = 0; j < n2; j++)
right_arr[j] = arr[mid + 1 + j];
// Merge the temporary arrays back into arr[left..right]
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (left_arr[i] <= right_arr[j]) {
arr[k] = left_arr[i];
i++;
} else {
arr[k] = right_arr[j];
j++;
}
k++;
}
// Copy the remaining elements of left_arr[], if any
while (i < n1) {
arr[k] = left_arr[i];
i++;
k++;
}
// Copy the remaining elements of right_arr[], if any
while (j < n2) {
arr[k] = right_arr[j];
j++;
k++;
}
}
void mergesort(int a[],int st, int dr)
{
if (st<dr) {
int m = (st + dr) / 2;
mergesort(a, st, m);
mergesort(a, m + 1, dr);
merge(a,st,m,dr);
// int i = st, j = m+1, b[100]={0}, k = 0;
//
// while (i < m && j < dr) {
// if(a[i]<a[j]) {
// b[k] = a[i];
// i++;
// }
// else{
// b[k] = a[j];
// j++;
// }
// k++;
// }
// while(i<m){
// b[k]=a[i];
// k++;
// i++;
// }
// while(j < dr){
// b[k]=a[j];
// k++;
// j++;
// }
// for(i=0;i<k;i++)
// a[st+i]=b[i];
}
}
int main() {
int n;
std::cin>>n;
int a[n];
for (int i=0;i<n;i++)
std::cin>>a[i];
mergesort(a,0,n-1);
for (int i=0;i<n;i++)
std::cout<<a[i]<<" ";
std::cout<<"\n";
return 0;
}