Pagini recente » Cod sursa (job #1583760) | Cod sursa (job #1110909) | Profil funkydvd | Cod sursa (job #1355769) | Cod sursa (job #3211145)
#include<cmath>
#include<fstream>
std::ifstream cin("algsort.in");
std::ofstream cout("algsort.out");
int n, v[500004];
///MergeSort
void merge(int v[], int st, int dr){
int i = st, j, k=0, aux[500004];
int mijl = (st + dr) / 2;
j = mijl + 1;
while( i <= mijl && j <= dr){
if(v[i] < v[j]){
aux[++k] = v[i++];
}else {
aux[++k] = v [j++];
}
}
if(i <= mijl)
for( j=i; j <= mijl; j++)
aux[++k] = v[j];
else for(i = j ; i <= dr ; i++)
aux[++k] = v[i];
for(int i = st, j = 1 ; i <= dr ; i++, j++)
v[i] = aux[j];
}
void merge_sort(int v[], int st, int dr){
if(dr - st > 1){
int mijl = (st + dr) / 2;
merge_sort(v, st, mijl);
merge_sort(v,mijl+1, dr);
merge(v, st, dr);
}else{
if(v[st] > v[dr])
std::swap(v[st],v[dr]);
}
}
///MergeSort
///QuickSort
void quicksort(int v[], int st, int dr) {
if (st < dr) {
int mijl = st + std::rand() % (dr - st + 1);
std::swap(v[mijl], v[st]);
int i = st, j = dr, d = 0;
while (i < j) {
if (v[i] > v[j]) {
std::swap(v[i], v[j]);
d = 1 - d;
}
i += d;
j -= 1 - d;
}
quicksort(v, st, i - 1);
quicksort(v, i + 1, dr);
}
}
///QuickSort
int main(){
cin>>n;
for(int i=1; i <= n; i++)
cin >> v[i];
quicksort(v,1,n);
for(int i=1; i <= n; i++)
cout << v[i] << " ";
}