Pagini recente » Cod sursa (job #2347006) | Cod sursa (job #2308622) | Cod sursa (job #1687118) | Cod sursa (job #552878) | Cod sursa (job #3005333)
// QuickSort cu pivotare random - ordonare crescatoare
// (1) si (2) fac ca sortarea sa fie crescatore
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
#define NMAX 40000000
unsigned int a[NMAX];
int divide(int st,int dr){ // functia in care se face pivotarea
int poz;
poz=st+rand()%(dr-st+1);
unsigned int aux;
aux=a[st];
a[st]=a[poz];
a[poz]=aux;
unsigned int pivot=a[st];
while(st<dr){
while(st<dr&&a[dr]>=pivot) // (1)
dr--;
a[st]=a[dr];
while(st<dr&&a[st]<=pivot) // (2)
st++;
a[dr]=a[st];
}
a[st]=pivot;
return st;
}
void qsort(int st,int dr){
int poz;
if(st<dr){
poz=divide(st,dr);
qsort(st,poz-1);
qsort(poz+1,dr);
}
}
int main(){
int n;
srand(time(NULL));
cin>>n;
for(int i=1;i<=n;++i)
cin>>a[i];
qsort(1,n);
for(int i=1;i<=n;++i)
cout<<a[i]<<" ";
return 0;
}