Pagini recente » Cod sursa (job #388904) | Cod sursa (job #1614220) | Cod sursa (job #2358351) | Cod sursa (job #2190512) | Cod sursa (job #2897336)
////mergesort
//#include <iostream>
//#include <fstream>
//using namespace std;
//ifstream f("algsort.in");
//ofstream g("algsort.out");
//
//int N, v[100];
//
//void merge(int v[], int left, int mij, int right)
//{
// auto const subArrayOne = mij - left + 1;
// auto const subArrayTwo = right - mij;
//
// auto *leftArray = new int[subArrayOne],
// *rightArray = new int[subArrayTwo];
//
// // Copy data to temp arrays leftArray[] and rightArray[]
// for (auto i = 0; i < subArrayOne; i++)
// leftArray[i] = v[left + i];
// for (auto j = 0; j < subArrayTwo; j++)
// rightArray[j] = v[mij + 1 + j];
//
// auto indexOfSubArrayOne = 0,
// indexOfSubArrayTwo = 0;
// int indexOfMergedArray = left;
//
// while (indexOfSubArrayOne < subArrayOne && indexOfSubArrayTwo < subArrayTwo) {
// if (leftArray[indexOfSubArrayOne] <= rightArray[indexOfSubArrayTwo]) {
// v[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
// indexOfSubArrayOne++;
// }
// else {
// v[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
// indexOfSubArrayTwo++;
// }
// indexOfMergedArray++;
// }
//
// while (indexOfSubArrayOne < subArrayOne) {
// v[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
// indexOfSubArrayOne++;
// indexOfMergedArray++;
// }
// // Copy the remaining elements of
// // right[], if there are any
// while (indexOfSubArrayTwo < subArrayTwo) {
// v[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
// indexOfSubArrayTwo++;
// indexOfMergedArray++;
// }
//}
//
//
//void mergeSort(int v[], int start, int stop)
//{
// if (start >= stop)
// return;
//
// auto mij = start + (stop -start) / 2;
// mergeSort(v, start, mij);
// mergeSort(v, mij + 1, stop);
// merge(v, start, mij, stop);
//}
//
//
//int main() {
// f >> N;
// for (int i = 0; i < N; i++)
// f >> v[i];
//
// mergeSort(v, 0, N - 1);
//
// for(int i = 0; i < N; i++)
// g << v[i] << " ";
//
// return 0;
//}
//MERGE SORT
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int N, v[100000];
void merge(int *v, int left, int right, int mid)
{
int i, j, k, c[10000];
i = left;
k = left;
j = mid + 1;
while (i <= mid && j <= right) {
if (v[i] < v[j]) {
c[k] = v[i];
k++;
i++;
}
else {
c[k] = v[j];
k++;
j++;
}
}
while (i <= mid) {
c[k] = v[i];
k++;
i++;
}
while (j <= right) {
c[k] = v[j];
k++;
j++;
}
for (i = left; i < k; i++) {
v[i] = c[i];
}
}
void merge_sort(int *v, int left, int right)
{
if (left < right){
int mid=(left+right)/2;
merge_sort(v,left,mid);
merge_sort(v,mid+1,right);
merge(v,left,right,mid);
}
}
int main()
{
f >> N;
for (int i = 0; i < N; i++)
f >> v[i];
merge_sort(v, 0, N-1);
for (int i = 0; i < N; i++)
g << v[i] << " ";
}