Pagini recente » Cod sursa (job #1732115) | Cod sursa (job #1110860) | Cod sursa (job #2027984) | Cod sursa (job #2406963) | Cod sursa (job #3211157)
#include <iostream>
#include <vector>
#include <fstream>
std::ifstream f("algsort.in");
std::ofstream g("algsort.out");
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]<<" ";
return 0;
}