Pagini recente » Cod sursa (job #69983) | Cod sursa (job #2591747) | Cod sursa (job #2716114) | Cod sursa (job #1655910) | Cod sursa (job #766164)
Cod sursa(job #766164)
#include <fstream>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
//int verif ( int [],int,int,int);
int binara(int,int,int);
void sortare(int,int);
void merge(int,int,int,int);
int v[500000],aux[500000];
int main()
{
int n,j,i,nr=0,poz,k;
fin>>n;
for(i=0;i<n;i++)
fin>>v[i];
sortare(0,n-1);
for(i=0;i<n;i++)
fout<<v[i]<<" ";
/* for(i=0;i<n-2;i++)
for(j=i+1;j<n-1;j++)
/*for(k=j+1;k<n;k++)
if ( ( v[i]+v[j]>=v[k] )&& (v[i]+v[k]>=v[j] )&&( v[j]+v[k]>=v[i] ) )
nr++;
trebe comentat ( inchis comentariu)
{
k=v[i]+v[j];
poz=binara(j+1,n-1,k);
//if(poz==j+1)
//{
//k=v[i]+v[j];
if ( k>=v[poz] )
{
//nr++;
while (poz>j)
{
nr++;
poz--;
}
}
else
if (k>=v[--poz]&&poz>j)
{
nr++;
poz--;
while (poz>j)
{
nr++;
poz--;
}
}
//}
}
fout<<nr;*/
fin.close();
fout.close();
return 0;
}
/*
int verif( int v[800],int i, int j ,int k)
{
if( ( v[i]+v[j]>=v[k] )&& (v[i]+v[k]>=v[j] )&&( v[j]+v[k]>=v[i] ) )
return 1;
return 0;
}
*/
int binara (int a,int b,int x)
{
int mid;
mid=a+(b-a)/2;
if (a!=b)
if ( v[mid] >= x )
{
return binara (a,mid,x );
}
else
{
return binara (mid+1,b,x);
}
else
return a;
}
void sortare (int a,int b)
{
int mijl;
mijl=a+(b-a)/2;
if(a<b)
{
sortare(a,mijl);
sortare(mijl+1,b);
merge(a,mijl,mijl+1,b);
}
}
void merge (int a,int na,int b,int nb)
{
int i=0,j,k,l;
k=nb;
l=a;
while (a<=na&&b<=nb)
{
if (v[a]<=v[b])
aux[i++]=v[a++];
else
aux[i++]=v[b++];
}
while (a<=na)
{
aux[i++]=v[a++];
}
while (b<=nb)
{
aux[i++]=v[b++];
}
j=i;
for(i=k;i>=l;i--)
{
v[i]=aux[--j];
}
}