# PBinfo #914 – HalfSort1 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerinţa
Se dă un vector cu n elemente numere întregi, n fiind număr par. Să se ordoneze crescător elementele din prima jumătate a vectorului și descrescător elementele din a doua jumătate.

Se vor defini și apela următoarele subprograme:


citire, care citește  valoarea lui n și cele n elemente ale tabloului
afisare, care afișează elementele tabloului, separate prin exact un spațiu
sortare, care ordonează elementele vectorului cuprinse între doi indici transmiși ca parametru. Criteriul de ordonare (crescător/descrescător) va fi transmis ca parametru.

În programele C/C++ nu se vor folosi variabile globale.

Date de intrare
Fişierul de intrare halfsort1.in conţine pe prima linie numărul n si pe a doua linie n numere întregi separate prin spaţii.

Date de ieşire
Fişierul de ieşire halfsort1.out va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

Restricţii şi precizări

1 ≤ n ≤ 100, n număr par
valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 1.000.000.000

Exemplu:
halfsort1.in

6
8 2 9 4 5 7
halfsort1.out

2 8 9 7 5 4

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("halfsort1.in");
ofstream fout("halfsort1.out");
void citire(int a[], int &n);
void afisare(int a[], int n);
void sortare(int a[], int st , int dr , int criteriu);
int main()
{
	int n , v[1005];
	citire(v , n);
	sortare(v , 0 , n/2 , 0);
	sortare(v , n/2 , n , 1);
	afisare(v , n);
	return 0;
}
void citire(int a[] , int & n)
{
	fin >> n;
	for(int i = 0 ; i < n ; i ++)
		fin >> a[i];
}
void afisare(int a[], int n)
{
	for(int i = 0 ; i < n ; i ++)
		fout << a[i] << " ";
}
void sortare(int a[], int st , int dr , int criteriu)
{
	//criteriu == 1 -> ordonare descrescatoare
	//criteriu != 1 -> ordonare crescatoare
	int semn  = 1;
	if(criteriu == 1)
		semn = -1;
	for(int i = st ; i < dr -1 ; i ++)
		for(int j = i + 1 ; j < dr ; j ++)
			if(semn * a[i] > semn * a[j])
			{
				int aux = a[i];
				a[i] = a[j];
				a[j] = aux;
			}
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/914)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/914/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-914/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
