Pagini recente » Cod sursa (job #2053468) | Cod sursa (job #2059206) | Cod sursa (job #1294058) | Cod sursa (job #1917146) | Cod sursa (job #2320425)
#include <fstream>
#include<cstdlib>
#include<ctime>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500010;
int n,a[N],b[N];
void quickSort(int,int);
void mergeSort(int,int);
void interclasare(int,int,int);
int main()
{
srand(time(0));
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
mergeSort(1,n);
for(int i=1;i<=n;i++)
g<<a[i]<<' ';
return 0;
}
void mergeSort(int st,int dr)
{
if(st==dr)
return;
int mi=(st+dr)/2;
mergeSort(st,mi);
mergeSort(mi+1,dr);
interclasare(st,mi+1,dr);
}
void interclasare(int st,int mi,int dr)
{
int k=st,i=st,j=mi;
while(i<mi&&j<=dr)
{
if(a[i]<=a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<mi)
b[k++]=a[i++];
while(j<=dr)
b[k++]=a[j++];
for(i=st;i<=dr;i++)
a[i]=b[i];
}
void quickSort(int St,int Dr)
{
int st=St,dr=Dr,mi,pivot;
mi=st+rand()%(dr-st+1);
pivot=a[mi];
do
{
while(a[st]<pivot)st++;
while(a[dr]>pivot)dr--;
if(st<=dr){swap(a[st],a[dr]);st++;dr--;}
}
while(st<=dr);
if(St<=dr)quickSort(St,dr);
if(st<=Dr)quickSort(st,Dr);
}