Sunteți pe pagina 1din 4

/* Sortarea prin interclasare

se considera 2 vectori x si y sortati de dimensiune m, respectiv n;


se obtine un nou vector sortat z astfel:
k=1,...,m+n
z[k]=x[i] pentru (x[i]<y[j], i<=m, j<=n) sau (j>n)
z[k]=y[j] pentru (x[i]>=y[j], i<=m, j<=n) sau (i>m)
*/
#include <stdio.h>
#include <conio.h>
#define max 50
void main(void){
clrscr();
int i,j,n,m,k;
int x[max],y[max],z[2*max];
printf("nr elemente pentru x =");scanf("%d",&m);
for(i=1;i<=m;i++)
{
printf("x[%d]=",i);scanf("%d",&x[i]);
}
printf("nr elemente pentru y =");scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("y[%d]=",i);scanf("%d",&y[i]);
}
i=1;
j=1;
k=0;
while (i<=m&&j<=n)
{
k++;
if (x[i]<y[j])
{
z[k]=x[i];
i++;
}
else
{
z[k]=y[j];
j++;
}
}
if (i<=m)
for(j=i;j<=m;j++)
{
k++;
z[k]=x[j];
}
if (j<=n)
for(i=j;i<=n;i++)
{
k++;
z[k]=y[i];
}
for(i=1;i<=k;i++) printf("%d\t",z[i]);
1

printf("\n");
getch();
}
/* Sortarea prin interschimbare (metoda bulelor)
vectorul initial cu elemente distincte v,
-daca 2 elemente alaturate vor fi gasite necorespunzatoare ordonarii cerute,
vor fi interschimbate
-procesul continua pana cand nu mai sunt necesare interschimbari
sortarea se face in acelasi vector v
*/
#include <stdio.h>
#include <conio.h>
#define max 50
void main(void){
clrscr();
int i,n,ind,aux;
int v[max];
printf("nr elemente=");scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("v[%d]=",i);scanf("%d",&v[i]);
}
do
{ for(i=1;i<=n-1;i++)
{ind=0;
if (v[i]>v[i+1]) {
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
ind=1;
}
}
} while (ind!=0);
for(i=1;i<=n;i++) printf("%d\t",v[i]);
printf("\n");
getch();
}
/* Sortarea prin insertie directa
fiecare element este inserat in locul corespunzator, in raport cu elementele sortare
anterior
- se considera v[1]<=v[2]<=...v[j-1]
- se compara v[j] cu v[j-1], v[j-2],... pana cand se determina ca v[j] trebuie inserat
intre v[i] si v[i+1]
- apoi se deplaseaza secventa v[i+1],...,v[j-1] cu o pozitie si se va introduce noul
element in pozitia i+1
*/
2

#include <stdio.h>
#include <conio.h>
#define max 50
void main(void){
clrscr();
int i,j,n,x;
int v[max];
printf("nr elemente=");scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("v[%d]=",i);scanf("%d",&v[i]);
}
for(j=2;j<=n;j++)
{ x=v[j];
i=j-1;
while (i>0&&v[i]>x)
{
v[i+1]=v[i];
i--;
}
v[i+1]=x;
}
for(i=1;i<=n;i++) printf("%d\t",v[i]);
printf("\n");
getch();
}
/* Sortarea prin numarare
vectorul initial cu elemente distincte v, dupa sortare se obtine vectorul a
- sortarea prin numararea comparatiilor se bazeaza in a numara pentru fiecare
element v[i] cate elemente mai mici strict decat el exista; numerele obtinute se
memoreaza intr-un contor, pe baza lui se rearanjeaza vectorul v intr-un nou vector a
*/
#include <stdio.h>
#include <conio.h>
#define max 50
void main(void){
clrscr();
int i,j,n;
int v[max],a[max],contor[max];
printf("nr elemente=");scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("v[%d]=",i);scanf("%d",&v[i]);
}
for(i=1;i<=n;i++) contor[i]=1;
for(j=2;j<=n;j++)
{ for(i=1;i<=j-1;i++)
{ if (v[i]<v[j]) contor[j]+=1;
else contor[i]+=1;
3

}
}
for(i=1;i<=n;i++) a[contor[i]]=v[i];
for(i=1;i<=n;i++) printf("%d\t",a[i]);
printf("\n");
getch();
}
/* Sortarea prin selectie directa :
se determina cel mai mic element din sir si se plaseaza pe prima pozitie;
se repeta pasul anterior pentru determinarea celui de-al i-lea element
din sir (cel mai mic din cele ramase), pana cand ramane un singur element,
care va fi cel mai mare si va ramane pe pozitia n
*/
#include <stdio.h>
#include <conio.h>
#define max 50
void main(void){
clrscr();
int i,j,n,aux;
int v[max];
printf("nr elemente =");scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("v[%d]=",i);scanf("%d",&v[i]);
}
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
{
if (v[i]>v[j])
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
}
}
for(i=1;i<=n;i++) printf("%d\t",v[i]);
printf("\n");
getch();
}