Pagini recente » Cod sursa (job #3227336) | Cod sursa (job #458801) | Cod sursa (job #1672286) | Cod sursa (job #401513) | Cod sursa (job #801651)
Cod sursa(job #801651)
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
void swap(int a[], int i, int j){
int aux;
aux = a[i]; a[i] = a[j]; a[j] = aux;
}
pair<int, int> partition2(int a[], int p, int r){
srand ( time(NULL) );
int x = p + rand() % (r - p + 1);
swap(a, x, r);
x = a[r];
int i = p-1, j = p, k = r;
while(j < k){
if(a[j] < x){
i++;
swap(a, i, j);
j++;
}
else if(a[j] == x){
j++;
}
else{
k--;
swap(a, k, j);
}
}
swap(a, r, k);
return make_pair(i-1, k+1);
}
void QS(int a[], int p, int r){
if(p < r){
pair<int, int> q = partition2(a, p, r);
QS(a, p, q.first);
QS(a, q.second, r);
}
}
int main(){
int N, *a;
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> N;
a = new int[N];
for(int i = 0; i < N; ++i)
f >> a[i];
QS(a, 0, N-1);
for(int i = 0; i < N; ++i)
g << a[i] << " ";
f.close();
g.close();
return 0;
}