Răspuns :
Explicație:
Prezint doua variante: prima, care este algoritmul de sortare mergesort bazat pe tehnica divide et impera, un algoritm optim din punct de vedere al timpului de executie, iar a doua, care este algoritmul de sortare prin interschimbare, nu la fel de optim ca si primul.
Prima varianta:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
void merge (int a[],int stang,int mijloc,int drept)
{
int i,j,k;
i=stang;
j=mijloc+1;
k=0;
int temp[drept-stang+1];
while(i<=mijloc&&j<=drept)
{
if(a[i]>a[j])
{
temp[k]=a[i];
i=i+1;
}
else
{
temp[k]=a[j];
j=j+1;
}
k=k+1;
}
while(i<=mijloc)
{
temp[k]=a[i];
i=i+1;
k=k+1;
}
while(j<=drept)
{
temp[k]=a[j];
j=j+1;
k=k+1;
}
for(k=0;k<=drept-stang;k++)
a[stang+k]=temp[k];
}
void mergesort (int a[],int stang,int drept)
{
int mijloc;
if(stang<drept)
{
mijloc=(stang+drept)/2;
mergesort(a,stang,mijloc);
mergesort(a,mijloc+1,drept);
merge(a,stang,mijloc,drept);
}
}
int main()
{
int a[100],n,i;
fin>>n;
for(i=0;i<n;i++)
fin>>a[i];
mergesort(a,0,n-1);
for(i=0;i<n;i++)
fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}
A doua varianta:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int main()
{
int a[100],n,i,j,aux;
fin>>n;
for(i=0;i<n;i++)
fin>>a[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=0;i<n;i++)
fout<<a[i]<<" ";
fin.close();
fout.close();
return 0;
}