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;
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Ne bucurăm să vă revedem și vă invităm să ne adăugați în lista de favorite!