Pagini recente » Cod sursa (job #1226607) | Cod sursa (job #2654441) | Cod sursa (job #215585) | Cod sursa (job #2233243) | Cod sursa (job #2952082)
#include <fstream>
using namespace std;
ifstream fin( "sort.in" );
ofstream fout( "sort.out" );
int v[1000];
void myqsort( int v[], int begin, int end ){
int b = begin, e = end, pivot = v[(begin + end) / 2], aux;
while( v[b] < pivot )
b++;
while( v[e] > pivot )
e--;
while( b < e ){
aux = v[e];
v[e] = v[b];
v[b] = aux;
do
b++;
while( v[b] < pivot );
do
e--;
while( v[e] > pivot );
}
if( begin < e )
myqsort( v, begin, e );
if( e + 1 < end )
myqsort( v, e + 1, end );
}
void merge( int v[], int st, int mij, int dr ){
int s1 = mij - st + 1, s2 = dr - mij, i1 = 0, i2 = 0, i3 = st;
int *left = new int[s1], *right = new int[s2];
for( int i = 0; i < s1; i++ )
left[i] = v[st + i];
for( int i = 0; i < s2; i++ )
right[i] = v[mij + 1 + i];
while( i1 < s1 && i2 < s2 ){
if( left[i1] <= right[i2] ){
v[i3] = left[i1];
i1++;
}
else{
v[i3] = right[i2];
i2++;
}
i3++;
}
while( i1 < s1 ){
v[i3] = left[i1];
i1++;
i3++;
}
while( i2 < s2 ){
v[i3] = right[i2];
i2++;
i3++;
}
delete[] left;
delete[] right;
}
void mergesort( int v[], int begin, int end ){
if( begin == end )
return;
int mij = (begin + end) / 2;
mergesort(v, begin, mij );
mergesort( v, mij + 1, end );
merge( v, begin, mij, end );
}
int main(){
int n, i;
fin >> n;
for( i = 0; i < n; i++ )
fin >> v[i];
myqsort( v, 0, n - 1 );
for( i = 0; i < n; i++ )
fout << v[i] << ' ';
return 0;
}