Cod sursa(job #793176)

Utilizator ioana.teocIoana Teoc ioana.teoc Data 2 octombrie 2012 09:25:16
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
//
//  main.cpp
//  Merge Sort
//
//  Created by Ioana Teoc on 9/22/12.
//  Copyright (c) 2012 Ioana Teoc. All rights reserved.
//

#include <iostream>
#include <stdlib.h>
#include <stdio.h>


using namespace std;

# define NMAX 500005

unsigned int V[NMAX], n;
//B[NMAX] ;


//void mergeSort(int l, int r){
//    if(l == r) return;
//    int m;
//    m = (l + r) / 2;
//    mergeSort(l, m);
//    mergeSort(m+1, r);
//    for(int i = l, j = m+1, k = 0; i <= m || j <= r; k++){
//        if((i <= m && V[i] <= V[j]) || j > r)
//            B[k] = V[i++];
//        else
//            B[k] = V[j++];
//    }
//    for(int i = l; i <= r; i++)
//        V[i] = B[i-l];
//}

void quickSort(int l, int r){
    if(r - l + 1 == 1) return;
    int randomNumber = rand() % (r - l + 1) + l;
    swap(V[l], V[randomNumber]);
    int x = V[l], i = l, j = r;
    while(true){
        while(V[i] < x && i < r) i++;
        while(V[j] > x && j > l) j--;
        if(i < j){
            swap(V[i++], V[j--]);
        }
        else break;
    }
    quickSort(l,j);
    quickSort(j+1, r);
}


int main()
{
    freopen("grader_test5.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &V[i]);
    }
    quickSort(0, n-1);
    for(int i = 0; i < n; i++){
        printf("%d ", V[i]);
    }
    
    return 0;

}