Pagini recente » Borderou de evaluare (job #1015352) | Cod sursa (job #1024043)
#include <fstream>
using namespace std;
void merge(int *array, const int &left, const int &right) {
int *temp = new int[right - left + 1];
int mid = left + (right - left) / 2;
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (array[i] <= array[j]) {
temp[k++] = array[i++];
} else {
temp[k++] = array[j++];
}
}
while (i <= mid) {
temp[k++] = array[i++];
}
while (j <= right) {
temp[k++] = array[j++];
}
for (i = 0; i < k; ++i) {
array[left + i] = temp[i];
}
delete[] temp;
}
void mergeSort(int *array, const int &left, const int &right) {
if (right - left < 1) {
return;
}
const int mid = left + (right - left) / 2;
mergeSort(array, left, mid);
mergeSort(array, mid + 1, right);
merge(array, left, right);
}
int main() {
int N, i;
ifstream in("algsort.in");
in >> N;
int *array = new int[N];
for (i = 0; i < N; ++i) {
in >> array[i];
}
in.close();
mergeSort(array, 0, N - 1);
ofstream out("algsort.out");
for (i = 0; i < N; ++i) {
out << array[i] << " ";
}
out.close();
delete[] array;
return 0;
}