INTERCLASAREA A DOI VECTORI

     Avand la dispozitie două tablouri unidimensionale (doi vectori) care au elementele ordonate crescător (sau descrescător) ne punem problema construirii unui al treilea tablou care să contină elementele primelor două respectând acelasi criteriu de ordonare (crescător sau descrescător).
      O primă idee ar fi aceea de a reuni elementele celor doi vectori, retinem rezultatul în cel de al treilea si apoi îl sortăm pe acesta crescător sau descrescător, în functie de cum erau ordonati vectorii initiali.  
 

Comentarii

  1. si daca cei doi vectori nu sunt ordonati cum facem interclasarea astfel incat sa obtinem un vector ordonat

    RăspundețiȘtergere
  2. Am facut tot ce este afisat aici ,insa cand am rulat programul nu mi s-a afisat vectorul c

    RăspundețiȘtergere
  3. N-are cum :) Merge. :) Verifica sintaxa.

    RăspundețiȘtergere
  4. Dupa patru ani de liceu am inteles interclasarea.Multumesc!

    RăspundețiȘtergere
  5. Si daca am 2 vectori ordonati descrescator cum folosesc interclasarea ca sa-i ordonez intr-un al 3-lea vector tot descrescator?

    RăspundețiȘtergere
  6. Se foloseste la fel doar ca atunci cand comparam elementul Ai cu Bi adaugam la C pe pozitia k elementul mai mare dintre Ai si Bi. :)

    RăspundețiȘtergere
    Răspunsuri
    1. de exemplu, daca,in pascal: if a[i]<b[j] then begin k:=k+1;
      c[k]:=b[j];
      si aici trecem mai departe cu i:=i+1? sau cu j:=j+1?

      Ștergere
    2. Daca elementul Ai a fost mai mic (if a[i]<b[j]) atunci incrementam i (mergem mai departe cu i=i+1). In caz contrar (Bj a fost mai mic) incrementam j.
      Vezi ca sunt sintetizati pasii pe figura cu fond galben.

      Ștergere
  7. Vectorul c nu trebuie sa aiba dimensiunea >20?

    RăspundețiȘtergere
    Răspunsuri
    1. gen in declararea marimii vectorului marimea lui a si b este de 20 daca vom folosi 11 elemente in a si 10 in b va disparea un element deoarece c are doar 20 elemente posibile

      Ștergere
  8. Acest comentariu a fost eliminat de autor.

    RăspundețiȘtergere
  9. Frumos explicat, doar ca este o mica problema.
    Daca vectorii a si b sunt declarati ca mai sus cu 20 de spatii (a[20] si b[20]) este necesar ca vectorul c sa aiba 40 de spatii ( c[40]). Altfel se vor pierde elemente. Numai bine !

    RăspundețiȘtergere
    Răspunsuri
    1. Pai scrie chiar la inceput ca vectorul a are n elemente, b are m elemente iar c are n+m elemente.

      Ștergere
    2. Asa e, m-am uitat mai mult la acea poza cu programul, iar acolo e gresit.

      Ștergere
  10. Acest comentariu a fost eliminat de autor.

    RăspundețiȘtergere
  11. De ce l nu este declarat? sau daca este unde, in caz ca nu am vazut bine ;)

    RăspundețiȘtergere
  12. This program in 2016:

    #include

    using namespace std;

    int main()
    {
    int a[20],b[20],c[20],n,m,i,j,k,l;
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    for(i=0;i<=n-1;i++)
    {
    cout<<"a["<>a[i];
    }
    for(j=0;j<=m-1;j++)
    {
    cout<<"b["<>b[j];
    }
    k=0;i=1;j=1;
    while(i<=n && j<=m)
    if(a[i]<b[j])
    {
    k++;
    c[k]=a[i];
    i++;
    }
    else
    {
    k++;
    c[k]=b[j];
    j++;
    }
    if(i<=n)
    for(l=i;l<=n;l++)
    {
    k++;
    c[k]=a[l];
    }
    if(j<=m)
    for(l=j;l<=m;l++)
    {
    k++;
    c[k]=b[l];
    }
    cout<<"vectorul interclasat este: "<<endl;
    for(i=1;i<=k;i++)
    cout<<c[i]<<" ";
    cout<<endl;
    return 0;
    }

    RăspundețiȘtergere
  13. This program in 2016:

    #include

    using namespace std;

    int main()
    {
    int a[20],b[20],c[20],n,m,i,j,k,l;
    cout<<"n="; cin>>n;
    cout<<"m="; cin>>m;
    for(i=0;i<=n-1;i++)
    {
    cout<<"a["<>a[i];
    }
    for(j=0;j<=m-1;j++)
    {
    cout<<"b["<>b[j];
    }
    k=0;i=1;j=1;
    while(i<=n && j<=m)
    if(a[i]<b[j])
    {
    k++;
    c[k]=a[i];
    i++;
    }
    else
    {
    k++;
    c[k]=b[j];
    j++;
    }
    if(i<=n)
    for(l=i;l<=n;l++)
    {
    k++;
    c[k]=a[l];
    }
    if(j<=m)
    for(l=j;l<=m;l++)
    {
    k++;
    c[k]=b[l];
    }
    cout<<"vectorul interclasat este: "<<endl;
    for(i=1;i<=k;i++)
    cout<<c[i]<<" ";
    cout<<endl;
    return 0;
    }

    RăspundețiȘtergere
  14. Daca vectorul cu elemente mai multe nu este sortat, atunci vectorul interclasat isi va pierde sortarea(v[i]v[i+2]). Ar fi mai bine sa se sorteze ambii vectori la penultimul pas, in if-uri sort(a[i]+i,a[i]+n) si apoi interclasarea curge de la sine :)

    RăspundețiȘtergere
    Răspunsuri
    1. Cei doi vectori initiali trebuie sa fie sortati. Abia apoi se poate face interclasarea lor.

      Ștergere
  15. Din 2 vectori ordonați crescător cum folosesc interclasarea ca sa ii ordonez descrescător intr-un al 3-lea vector?
    Se poate?

    RăspundețiȘtergere
    Răspunsuri
    1. Pentru asta trebuie mai intai sa sortezi descrescator cei doi vectori initiali.

      Ștergere

Trimiteți un comentariu

Postări populare de pe acest blog

Amintiri din trecut - Partea 2

Amintiri din trecut - Partea 1