Pagini recente » Cod sursa (job #2428039) | Cod sursa (job #1619941) | Cod sursa (job #1872512) | Cod sursa (job #1378132) | Cod sursa (job #825636)
Cod sursa(job #825636)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
FILE *f = fopen("algsort.in","r");
FILE *g = fopen("algsort.out","w");
int N;
int A[500100];
inline void swap(int &a,int &b)
{
int aux = a;
a = b;
b = aux;
}
void afisare(void)
{
for(int i=1;i<=N;i++)
fprintf(g,"%d ",A[i]);
}
inline int pozQS(int li,int ls)
{
int k = rand()%(ls-li);
int i;
swap(A[li+k],A[li]);
for(i=li+1;i<=ls;)
if(A[li] < A[i])
swap(A[i],A[ls]),--ls;
else
++i;
swap(A[li],A[--i]);
return i;
}
inline void InsertionSort(int li,int ls)
{
int val,j;
for(int i=li+1;i<=ls;i++)
{
val = A[i];
for(j=i;j>li && A[j-1] > val;A[j]=A[j-1],--j);
A[j] = val;
//afisare();
}
}
inline void QuickSort(int li,int ls)
{
if(ls-li < 11)
{
InsertionSort(li,ls);
return ;
}
int k = pozQS(li,ls);
QuickSort(li,k-1);
QuickSort(k+1,ls);
}
void citire(void)
{
fscanf(f,"%d",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d",&A[i]);
}
int main()
{
citire();
srand(time(NULL));
QuickSort(1,N);
afisare();
}