Se citeste un număr natural n si un vector v care să contina n numere întregi.Scrieti un program care ordonează crescător prima jumătate a vectorului si descrescător cealaltă jumătate.
Răspunsuri la întrebare
Răspuns de
1
#include <iostream>
using namespace std;
//lung reprezinta lungimea subsirului
//poz este pozitia de inceput a subsirului
//sens este sensul de crestere a sirului: daca este 1, crescator
//daca este -1. descrrescator
void sort_selectie(int v[],int lung,int poz,int sens){
int i,j,m,t;
//pornind de pe prima pozitie si parcurgand toata lungimea
for(i=poz;i<poz+lung;i++){
//valoarea actuala a pozitiei minime este i
m=i;
for(j=i;j<poz+lung;j++){
//daca este dorit sens crescator
if(sens==1){
//si pozitia curenta este mai mica decat cea precedenta
if(v[j]<v[m])
//pozitia minima devine cea actuala
m=j;
}
//analog doar pentru ca sens descrescator
else if(sens==-1){
//acum vedem daca pozitia curenta are valoare mai mare decat cea precedenta
if(v[j]>v[m])
m=j;
}
}
//am gasit un element mai favorabil decat cel precedent, facem interschumbare intre ei
t=v[i];
v[i]=v[m];
v[m]=t;
}
}
int main(){
int n,i,v[100],poz_inceput,lung_subsir1,lung_subsir2;
cout<<"Introduceti nr de termeni:";
cin>>n;
cout<<"Introduceti elementele vectorului:";
for(i=0;i<n;i++){
cin>>v[i];
}
//daca n impar, prima parte crescator va avea n/2+1 elemente
//cea de-a doua parte va avea n/2 elemente
if(n%2==1){
lung_subsir1=n/2+1;
lung_subsir2=n/2;
poz_inceput=n/2+1;
}
else{
lung_subsir1=n/2;
lung_subsir2=n/2;
poz_inceput=n/2;
}
//sortam cele 2 subsiruri
sort_selectie(v,lung_subsir1,0,1);
sort_selectie(v,lung_subsir1,poz_inceput,-1);
for(i=0;i<n;i++){
cout<<v[i]<<" ";
}
return 0;
}
using namespace std;
//lung reprezinta lungimea subsirului
//poz este pozitia de inceput a subsirului
//sens este sensul de crestere a sirului: daca este 1, crescator
//daca este -1. descrrescator
void sort_selectie(int v[],int lung,int poz,int sens){
int i,j,m,t;
//pornind de pe prima pozitie si parcurgand toata lungimea
for(i=poz;i<poz+lung;i++){
//valoarea actuala a pozitiei minime este i
m=i;
for(j=i;j<poz+lung;j++){
//daca este dorit sens crescator
if(sens==1){
//si pozitia curenta este mai mica decat cea precedenta
if(v[j]<v[m])
//pozitia minima devine cea actuala
m=j;
}
//analog doar pentru ca sens descrescator
else if(sens==-1){
//acum vedem daca pozitia curenta are valoare mai mare decat cea precedenta
if(v[j]>v[m])
m=j;
}
}
//am gasit un element mai favorabil decat cel precedent, facem interschumbare intre ei
t=v[i];
v[i]=v[m];
v[m]=t;
}
}
int main(){
int n,i,v[100],poz_inceput,lung_subsir1,lung_subsir2;
cout<<"Introduceti nr de termeni:";
cin>>n;
cout<<"Introduceti elementele vectorului:";
for(i=0;i<n;i++){
cin>>v[i];
}
//daca n impar, prima parte crescator va avea n/2+1 elemente
//cea de-a doua parte va avea n/2 elemente
if(n%2==1){
lung_subsir1=n/2+1;
lung_subsir2=n/2;
poz_inceput=n/2+1;
}
else{
lung_subsir1=n/2;
lung_subsir2=n/2;
poz_inceput=n/2;
}
//sortam cele 2 subsiruri
sort_selectie(v,lung_subsir1,0,1);
sort_selectie(v,lung_subsir1,poz_inceput,-1);
for(i=0;i<n;i++){
cout<<v[i]<<" ";
}
return 0;
}
bucuresti200:
Mulțumesc mult!!!!!!!
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă