Pagini recente » Cod sursa (job #145581) | Cod sursa (job #2856363) | Cod sursa (job #1330878) | Cod sursa (job #2185126) | Cod sursa (job #2442762)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
void swap(int * arr, int l, int r)
{
int tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}
int partition(int * arr, int start, int end)
{
int pivot = arr[start];
int idx = start + 1;
for (int i = start + 1; i <= end; i++)
{
if (arr[i] < pivot) {
swap(arr, idx++, i);
}
}
swap(arr, idx - 1, start);
return idx - 1;
}
void quicksort(int * arr, int start, int end)
{
if (start < end) {
int pivot = partition(arr, start, end);
quicksort(arr, start, pivot - 1);
quicksort(arr, pivot + 1, end);
}
}
void mergesort(int * arr, int start, int end)
{
if (start == end)
return;
int mid = (start + end) / 2;
mergesort(arr, start, mid);
mergesort(arr, mid + 1, end);
int * buff = new int[end - start + 1];
int i, j, k;
i = start;
j = mid + 1;
k = 0;
while (i <= mid && j <= end)
{
if (arr[i] < arr[j])
{
buff[k++] = arr[i++];
}
else
{
buff[k++] = arr[j++];
}
}
while (i <= mid)
{
buff[k++] = arr[i++];
}
while (j <= end)
{
buff[k++] = arr[j++];
}
for (int idx = 0; idx < end - start + 1; idx++)
{
arr[start + idx] = buff[idx];
}
delete[] buff;
}
int main()
{
// ifstream fin("algsort.in");
// ofstream fout("algsort.out");
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n;
scanf("%d", &n);
//fin >> n;
int *arr = new int[n];
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
//fin >> arr[i];
}
// random_shuffle(arr, arr + n);
// quicksort(arr, 0, n - 1);
mergesort(arr, 0, n - 1);
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
//fout << arr[i] << " ";
}
// fin.close();
// fout.close();
return 0;
}