Cod sursa(job #2834394)

Utilizator ViAlexVisan Alexandru ViAlex Data 16 ianuarie 2022 22:03:14
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
#include<stdlib.h>

const int mx=3e6+1000;
long long v[mx],n,aux;

inline void swap(long long &a,long long &b){
	aux=b;
	b=a;
	a=aux;
}

int partition(long long *v,int left,int right){
	int p_pos=rand()%(right-left+1)+left;
	long long pivot=v[p_pos];

	swap(v[right],v[p_pos]);
	
	int j=left;
	for(int i=left;i<=right;i++){
		if(v[i]<=pivot){
			swap(v[j],v[i]);
			j++;
		}	
	}
	return j-1;
} 

void sort(long long *v, int left, int right){
	if(left>=right){
		return;
	}
	int p=partition(v,left,right);
	sort(v,left,p-1);
	sort(v,p+1,right);
}


void read(){
	FILE* fin=fopen("algsort.in","r");
	fscanf(fin,"%lld",&n);

	for(int i=0;i<n;i++){
		fscanf(fin,"%lld",&v[i]);
	}
}


void solve(){
	sort(v,0,n-1);
	FILE* fout=fopen("algsort.out","w");
	for(int i=0;i<n;i++)
		fprintf(fout,"%lld ",v[i]);
}

int main(){
	srand(1248091824);
	read();
	solve();
	return 0;
}