Pagini recente » Cod sursa (job #159363) | Cod sursa (job #1671694) | Cod sursa (job #2276686) | Cod sursa (job #1651489) | Cod sursa (job #2275788)
#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[rd1] <= arr[rd3])
return ( (arr[rd2] < arr[rd3]) ? rd2:rd3);
if(arr[rd2] <= arr[rd1] && arr[rd2] <= arr[rd3])
return ( (arr[rd1] < arr[rd3]) ? rd1:rd3);
if(arr[rd3] <= arr[rd1] && arr[rd3] <= arr[rd2])
return ( (arr[rd1] < arr[rd2]) ? rd1:rd2);
}
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[500001];
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;
}