Cod sursa(job #801051)

Utilizator vladiiIonescu Vlad vladii Data 23 octombrie 2012 11:53:37
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
#define maxn 500010

int N;
int A[maxn];

void quickSort(int left, int right) {
     if(left >= right) return;

     int mid = left + rand() % (right - left);

     swap(A[mid], A[right]);

     int pos = left;

     for(int i=left; i<right; i++) {
          if(A[i] < A[right]) {
               swap(A[pos], A[i]);

               pos ++;
          }
     }

     swap(A[pos], A[right]);

     quickSort(left, pos - 1);
     quickSort(pos + 1, right);
}

int main() {
     srand(time(NULL));

     FILE * f1 = fopen("algsort.in", "r"), * f2 = fopen("algsort.out", "w");
     int i, j, p, q;

     fscanf(f1, "%d\n", &N);
     for(i=1; i<=N; i++) {
          fscanf(f1, "%d", &A[i]);
     }

     quickSort(1, N);

     for(i=1; i<=N; i++) {
          fprintf(f2, "%d ", A[i]);
     }

     fprintf(f2, "\n");
     fclose(f1); fclose(f2);
     return 0;
}