Cod sursa(job #2275764)

Utilizator richard26Francu Richard richard26 Data 3 noiembrie 2018 15:54:16
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

int mid(int l, int r, int arr[])
{
	int rd1 = rand () % (r - l + 1) + l;
	int rd2 = rand () % (r - l + 1) + l;
	int rd3 = rand () % (r - l + 1) + l;
	if(arr[rd1] <= arr[rd2] && arr[rd3] <= arr[rd2] && arr[rd1] <= arr[rd3]) return rd1;
	if(arr[rd2] <= arr[rd1] && arr[rd3] <= arr[rd1] && arr[rd2] <= arr[rd1]) return rd2;
	if(arr[rd3] <= arr[rd1] && arr[rd2] <= arr[rd1] && arr[rd3] <= arr[rd2]) return rd3;


}

int swp(int &a, int &b)
{
	int aux = a;
	a = b;
	b = aux;
}
int quickSort(int l, int r, int arr[])
{
	if(l < r){
	  
		int k = mid(l, r, arr);
		int pivot = arr[k];
		int i = l;
		int j = r;
		while(i <= j){
			while(arr[i] < pivot) i++;
			while(arr[j] > pivot) j--;
			if(i <= j){
			   swp(arr[i], arr[j]);
			   i++;
			   j--;
			}
			if(i < r) quickSort(i, r, arr);
			if(j > l) quickSort(l, j, arr);
        }
	}
}


int main()
{   
	ifstream f("algsort.in") ;
	ofstream g("algsort.out");
	int n, i;
	int arr[n];
	f>>n;
	for(i = 0; i < n; i++) f>>arr[i];
	quickSort(0, n - 1, arr);
    for(i = 0; i < n; i++) g<<arr[i]<<" ";
    f.close();
    g.close();
    return 0;


}