Cod sursa(job #2298798)

Utilizator valentinoMoldovan Rares valentino Data 8 decembrie 2018 15:23:14
Problema Sortare prin comparare Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

inline void Swap(int *A, int *B)
{
    int aux = *A;
    *A = *B;
    *B = aux;
}

void PrintArray(FILE *file_out, int *Arr, int Size)
{
    int i;
    for (i = 0; i < Size; ++i)
        fprintf(file_out, "%d ", *(Arr + i));
}

int Partition(int *arr, int low, int high)
{
    int pivot = arr[high];
    //alegem pivotul random
    int smallerIndex = low - 1;
    int index;
    for (index = low; index < high; ++index)
    {
        if (arr[index] < pivot)
        {
            Swap(&arr[index], &arr[++smallerIndex]);
        }
    }
    Swap(&arr[++smallerIndex], &arr[high]);
    //punem pivotul pe pozitia corespunzatoare
    return smallerIndex;
}

void QuickSort(int *arr, int low, int high)
{
    if (low < high)
    {
        srand(time(NULL));
        int randomPosition = low + rand() % (high - low);
        Swap(&arr[high], &arr[randomPosition]);

        int pivot = Partition(arr, low, high);

        QuickSort(arr, low, pivot - 1);
        QuickSort(arr, pivot + 1, high);
    }
}

int main()
{
    int i;
    int *arr, size;

    FILE *file_in, *file_out;
    file_in = fopen("algsort.in", "r");
    file_out = fopen("algsort.out", "w");

    fscanf(file_in, "%d", &size);
    arr = (int*)malloc(sizeof(int) * size);
    for (i = 0; i < size; ++i)
        fscanf(file_in, "%d", arr + i);

    QuickSort(arr, 0, size - 1);
    PrintArray(file_out, arr, size);

    
}