Pagini recente » Cod sursa (job #1415480) | Cod sursa (job #203005) | Cod sursa (job #2456154) | Cod sursa (job #1134559) | Cod sursa (job #953384)
Cod sursa(job #953384)
#include<fstream>
using namespace std;
void swap(int *a, int *b)
{
int aux = *a;
*a = *b;
*b = aux;
}
int partition(int *a, int p, int r)
{
int x, i, j;
i = p - 1; // limita superioara a elementelor mai mici decat pivotul
x = a[r]; // pivotul
for(j = p; j < r; j++)
{
if(a[j] < x) // daca elem curent e mai mic decat pivotul
{
i++; // marim spatiul numerelor mai mici decat pivotul
swap(a + i, a + j); // schimbam numarul mai mic decat x cu primul element care era mai mare ca x
// a[j] va ajunge in multimea de nr. mai MICI decat pivotul
}
}
swap(a + i + 1, a + r); // mutam pivotul la mijloc <=> il schimbam cu primul element mai mare ca el
return i + 1;
}
void quickSort(int *a, int p, int r)
{
if(p < r)
{
int q = partition(a, p, r);
quickSort(a, p, q - 1);
quickSort(a, q + 1, r);
}
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int *a, n, i;
fin >> n;
a = new int[n];
for(i = 0; i < n; i++)
fin >> a[i];
quickSort(a, 0, n - 1);
for(i = 0; i < n; i++)
fout << a[i] << " ";
return 0;
}