Cod sursa(job #3242117)

Utilizator CondoracheAlexandruCondorache Alexandru CondoracheAlexandru Data 9 septembrie 2024 10:47:36
Problema Sortare prin comparare Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.17 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 l, int r , int pivot){
    while(l<=r){
        while(arr[l]<pivot){
            l++;
        }
        while(arr[r]>pivot){
            r--;
        }
        if(l<=r){
            int temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            l++;
            r--;
        }
    }
    return l;
}

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, pi);
    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;
}