Cod sursa(job #3003516)

Utilizator willOcanaru Mihai will Data 15 martie 2023 19:29:12
Problema Sortare prin comparare Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int v[500003]={0};
int a[500003]= {0};
int n;

void quicksort(int left, int right){
    
    if(left>=right) return;
    
    srand(time(NULL));
    int pivot = rand() % (right-left+1) + left;
    

    int index = left,last = right;
    
    
    for(int i=left;i<=right;i++){
        if(v[i] < v[pivot]){
            a[index++] = v[i];
        }
        else if(v[i] > v[pivot]){
            a[last--] = v[i];
            
        }
        else{
            if(v[i] == v[pivot] && i!=pivot){
                a[index++] = v[i];
            }
        }
    }
    
    a[index] = v[pivot];
    
    for(int i=left;i<=right;i++){
        v[i] = a[i];
    }
    
    // memcpy(v+left, a+left, (right-left+1) * 4);
    
    
    quicksort(left,index-1);
    quicksort(index+1,right);

}


int main()
{   
    
    FILE* f = fopen("algsort.in", "r");
    FILE* g = fopen("algsort.out", "w");
    
    fscanf(f, "%d", &n);
    // fscanf(f, " ");
    
    // printf("%d\n", n);
    
    // for(int i=0;i<n;i++){
    //     f>>v[i];
    // }
    
    for(int i=0;i<n;i++){
        fscanf(f, "%d", &v[i]);
        // printf("%d ", v[i]);
    }
    
    // fread(v, sizeof(int), n, f);
    

    quicksort(0,n-1);
    
    for(int i=0;i<n;i++){
        // printf("%d ", v[i]);
        fprintf(g, "%d ", v[i]);
    }
    

    return 0;
}