Cod sursa(job #1821771)

Utilizator mdiannnaMarusic Diana mdiannna Data 3 decembrie 2016 16:51:51
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

using namespace std;

int N;
int A[500000];

void citire(){
    scanf("%d", &N);
    for(int i=1; i<=N; i++)
        scanf("%d", &A[i]);
}

void afisare(){
    for(int i=1; i<=N; i++)
        printf("%d ", A[i]);
}


int random(int left, int right){
    return rand() % right + left;
}

int Partition(int left, int right){
    //int p = (left+right)/2;
    int p = random(left, right);

    int x = A[p];
    int iLeft = left;
    int iRight = right;
    do{
        while(A[iLeft]<x)
            iLeft++;
        while(A[iRight]>x)
            iRight--;
        if(iLeft<=iRight){
            swap(A[iLeft], A[iRight]);
            iLeft++;
            iRight--;
        }

    }while (iLeft<=iRight);

    return iLeft-1;
}

void QuickSort(int left, int right){
    if(right-left+1 <= 1)
        return;
    int q = Partition(left, right);
    QuickSort(left, q-1);
    QuickSort(q+1, right);
}

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

    srand(time(NULL));
    citire();
     QuickSort(1, N);
    afisare();

    return 0;
}