Cod sursa(job #3242118)

Utilizator CondoracheAlexandruCondorache Alexandru CondoracheAlexandru Data 9 septembrie 2024 10:50:03
Problema Sortare prin comparare Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <stdio.h>
#include <stdlib.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("popcnt,avx2")
#define ll long long

int partition(int *arr, int low, int high) {
    int pivot = arr[low];
    int i = low;
    int j = high;

    while (i < j) {
        while (arr[i] <= pivot && i <= high - 1) {
            i++;
        }

        while (arr[j] > pivot && j >= low + 1) {
            j--;
        }
        if (i < j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[low];
    arr[low] = arr[j];
    arr[j] = temp;
    // swap(arr[low], arr[j]);
    return j;
}

void quick_sort(int* a, int low, int high) {
    if (low >= high) {
        return;
    }
    int pi = a[low + (high - low) / 2];
    int pivot = partition(a, low, high);
    quick_sort(a, low, pivot); 
    quick_sort(a, pivot + 1, high);
}

void solve() {
    FILE* in = fopen("algsort.in", "r");
    FILE* out = fopen("algsort.out", "w");
    int n;
    fscanf(in, "%d", &n);
    int* a = malloc(n * sizeof(int));
    for (int i = 0; i < n; i++) {
        fscanf(in, "%d", &a[i]);
    }
    quick_sort(a, 0, n - 1);
    for (int i = 0; i < n; i++) {
        fprintf(out, "%d ", a[i]);
    }
    free(a);
}
 
int main() {
    int t = 1;
    // fin >> t;
    while (t--) {
        solve();
    }
    return 0;
}