Cod sursa(job #2987569)

Utilizator willOcanaru Mihai will Data 2 martie 2023 15:08:26
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

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

void quicksort(int left, int right){
    
    if(left>=right) return;
    
    int pivot = rand() % (right-left+1) + left;
    
    // int* a = new int[right-left+1];
    
    int index = left,last = right;
    
    for(int i=left;i<=right;i++){
        cout<<v[i]<<" ";
    }
    cout<<v[pivot]<<endl;
    
    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];
    
    index = left;
    for(int i=left;i<=right;i++){
        v[i] = a[i];
    }
    
    for(int i=left;i<=right;i++){
        cout<<v[i]<<" ";
    }
    cout<<endl;
    
    quicksort(left,right-1);
    quicksort(left+1,right);
    
    // delete[] a;
}


int main()
{
    int x;
    f>>n;
    
    
    for(int i=0;i<n;i++){
        f>>v[i];
    }
    
    // for(int i=0;i<n;i++){
    //   for(int j=i+1;j<n;j++){
    //       if(v[i]>v[j]){
    //           int aux=v[i];
    //           v[i] = v[j];
    //           v[j] = aux;
    //       }
    //   }
    // }
    quicksort(0,n-1);
    for(int i=0;i<n;i++){
        g<<v[i]<<" ";
    }
    

    return 0;
}