Documente Academic
Documente Profesional
Documente Cultură
Problema elementara: daca avem un singur disc pe tija a, acesta se muta pe tija c.
1 1
2 3
3 7
4 15
5 31
n
2 -1
n
64
18 446 744 073 709 551 615
ULLONG_MAX
QUICKSORT
#include<iostream>
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
int i;
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
}
int aux, i, j;
aux=v[q];
i=p-1;
for(j=p;j<=q-1;j++)
if(v[j]<=aux)
i=i+1;
swap(v[i],v[j]);
swap(v[i+1],v[q]);
return i+1;
if(p<q)
Qsort(v, p,m-1);
Qsort(v, m+1,q);
int main()
int v[100001],n;
citire(v,n);
Qsort(v, 1,n);
afis(v,n);
return 0;
MERGESORT
#include<iostream>
#define Max 100001
using namespace std;
int v[Max],n;
void citire()
{
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
}
void interclasare(int p, int m, int u)
{
int c[Max],i,j,k;
i=p;
j=m+1;
k=0;
while(i<=m && j<=u)
{
if(v[i]<v[j])
c[++k]=v[i++];
else
c[++k]=v[j++];
}
while(i<=m)
c[++k]=v[i++];
while(j<=u)
c[++k]=v[j++];
for(i=1;i<=k;i++)
v[p+i-1]=c[i];
}
void merge_s(int p,int u)
{
int m;
if(u>p)
{
m=(p+u)/2;
merge_s(p,m);
merge_s(m+1,u);
interclasare(p,m,u);
}
}
void afis()
{
int i;
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
}
int main()
{
citire();
merge_s(1,n);
afis();
return 0;
}