Cerinţa
Scrieţi definiția completă a subprogramului C++ recursiv ordonare care are 2 parametri: a, prin care primeşte un tablou unidimensional cu maximum 1000 de numere naturale mai mici decât 1.000.000.000 și n, numărul efectiv de elemente ale tabloului.
Subprogramul ordonează crescător elementele tabloului a, fără a returna valori.
Restricţii şi precizări
0 < n <= 1000
numele subprogramului cerut este ordonare
parametrii sunt, în această ordine: a, n
elementele tabloului a sunt indexate de la zero
se recomandă realizarea unei soluții recursive
Exemplu
Dacă n=6 și a=(63,273,9,83,93,123), după apelul subprogramului tabloul a devine (9,63,83,93,123,273).
Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţieori.
Răspunsuri la întrebare
Răspuns de
3
#include <iostream>
using namespace std;
void ordonare_recursiva(int a[],int n){
//daca am terminat de sortat, terminam recusivitatea
int x,j;
if(n<1){
return;
}
//sorta recursiv n-1 elemente
ordonare_recursiva(a,n-1);
//notam cu x elementul pe care vrem sa-l introducem in sir
x=a[n-1];
//includem an n-lea element in sir
//pornim de la coada sirului s
//si vedem fata de cine este mai mic. Cat timp este mai mic
//continuam sa trecem prin sirul de n-1 termeni cand gasim un termen
//mai mic decat el, atunci ne oprim. Am sortat coada sirului
//in apelul recursiv putem considera un element mai putin
//penultimul element
j=n-2;
//cat timp x mai mic decat termenii
//si nu am ajuns la primul termen
while(j>=0&&a[j]>x){
//mutam sirul la
a[j+1]=a[j];
j--;
}
//acum introducem valoarea x
a[j+1]=x;
}
int main(){
int n,a[1000],i;
cout<<"Introduceti numarul de termeni:";
cin>>n;
cout<<"Introduceti termenii:\n";
for(i=0;i<n;i++){
cin>>a[i];
}
ordonare_recursiva(a,n);
cout<<"Termenii ordonati crescator:\n";
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
using namespace std;
void ordonare_recursiva(int a[],int n){
//daca am terminat de sortat, terminam recusivitatea
int x,j;
if(n<1){
return;
}
//sorta recursiv n-1 elemente
ordonare_recursiva(a,n-1);
//notam cu x elementul pe care vrem sa-l introducem in sir
x=a[n-1];
//includem an n-lea element in sir
//pornim de la coada sirului s
//si vedem fata de cine este mai mic. Cat timp este mai mic
//continuam sa trecem prin sirul de n-1 termeni cand gasim un termen
//mai mic decat el, atunci ne oprim. Am sortat coada sirului
//in apelul recursiv putem considera un element mai putin
//penultimul element
j=n-2;
//cat timp x mai mic decat termenii
//si nu am ajuns la primul termen
while(j>=0&&a[j]>x){
//mutam sirul la
a[j+1]=a[j];
j--;
}
//acum introducem valoarea x
a[j+1]=x;
}
int main(){
int n,a[1000],i;
cout<<"Introduceti numarul de termeni:";
cin>>n;
cout<<"Introduceti termenii:\n";
for(i=0;i<n;i++){
cin>>a[i];
}
ordonare_recursiva(a,n);
cout<<"Termenii ordonati crescator:\n";
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Chimie,
8 ani în urmă
Biologie,
8 ani în urmă
Engleza,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă