Cod sursa(job #3031419)

Utilizator CMinfoarenaMahalu Ciprian CMinfoarena Data 19 martie 2023 20:46:48
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb


#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

 //SHELLSORT
/*void shellsort(int v[], int n)
{
	int i, j, k, temporar;
	for (i = n / 2; i > 0; i /= 2)
	{
		for (j = i; j < n; j++)
		{
			temporar = v[j];
			k;
			for (k = j; k >= i && v[k - i] > temporar; k = k - i)
				v[k] = v[k - i];
			v[k] = temporar;
		}
	}
}

int main()
{
	int v[500000],n;
	f >> n;
	for (int i = 0; i < n; i++)
		f >> v[i];
	shellsort(v, n);
	for (int i = 0; i < n; i++)
		g << v[i] << " ";
	return 0;
}*/


 //MERGESORT
void merge(int v[], int st, int dr, int mij)
{
	int k =0, i = st, j = mij+1, temp[101] = { 0 };
	while (i <= mij && j <= dr)
	{
		if (v[i] < v[j])
		{
			temp[k] = v[i];
			k++;
			i++;
		}
		else
		{
			temp[k] = v[j];
			k++;
			j++;
		}
	}
	while (i <= mij)
	{
		temp[k] = v[i];
		k++;
		i++;
	}
	while (j <= dr)
	{
		temp[k] = v[j];
		k++;
		j++;
	}
	for (int l = st; l <= dr; l++)
	{
		v[l] = temp[l - st];
	}
}
void mergesort(int v[], int st, int dr)
{
	if (st < dr)
	{
		int mij = (st + dr) / 2;
		mergesort(v, st, mij);
		mergesort(v, mij + 1, dr);
		merge(v, st, dr, mij);
	}
}
int main()
{
	int v[500000],n;
	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;
}


// RADIXSORT
/*int maxim(int v[], int n) //functie auxiliara pentru a afla valoarea maxima din array
{
	int mx = v[0];
	for (int i = 1; i < n; i++)
		if (v[i] > mx)
			mx = v[i];
	return mx;
}
void radixsort()
*/