Cod sursa(job #1986810)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 28 mai 2017 22:43:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<cstdio>
#include<ctime>
#include<algorithm>
using namespace std;

int N, myArray[1 << 19];

int RandomizedHoarePartition(int sequence[], int left, int right){

    int index = left + rand() % (right - left + 1);
    int pivot = sequence[index];

    int i = left - 1;
    int j = right + 1;

    while(1){
        do{++i;}while(sequence[i] < pivot);
        do{--j;}while(sequence[j] > pivot);
        if(i < j){
            swap(sequence[i], sequence[j]);
        }else return j;
    }
}
void QuickSort(int sequence[], int left, int right){

    if(left < right){
        int split = RandomizedHoarePartition(sequence, left, right);
        QuickSort(sequence, left, split);
        QuickSort(sequence, split + 1, right);
    }
}

inline int get_nr(){

    int number = 0;
    char c = getchar();

    while(!(47 < c && c < 58)){
        c = getchar();
    }
    while(47 < c && c < 58){
        number = number * 10 + c - '0';
        c = getchar();
    }
    return number;
}

int main() {

    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    N = get_nr();

    for(int i = 0; i < N; i++){
        myArray[i] = get_nr();
    }srand(time(NULL));

    QuickSort(myArray, 0, N-1);

    for(int i = 0; i < N; i++){
        printf("%d ", myArray[i]);
    }
    return 0;
}