Pagini recente » Cod sursa (job #2596914) | Cod sursa (job #425638) | Cod sursa (job #736780) | Cod sursa (job #1609631) | Cod sursa (job #2228543)
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int N = 500002, K = 40;
int v[N], a[N];
void interclasare(int st, int dr, int mid){
int i = st, j = mid + 1, poz = st;
while(i <= mid && j <= dr)
if(v[i] > v[j])
a[poz++] = v[j++];
else
a[poz++] = v[i++];
if(i <= mid)
for(int j=i;j<=mid;j++)
a[poz++] = v[j];
else
for(int i=j;i<=dr;i++)
a[poz++] = v[i];
for(int i=st;i<=dr;i++)
v[i] = a[i];
}
void insertionSort(int st, int dr){
int key, j;
for(int i=st+1;i<=dr;i++){
key = v[i];
j = i - 1;
while(j >= st && v[j] > key)
v[j+1] = v[j--];
v[j+1] = key;
}
}
void divide(int st, int dr){
int mid = (st + dr) / 2;
if(dr - st < K)
insertionSort(st,dr);
else{
divide(st,mid);
divide(mid+1,dr);
interclasare(st,dr,mid);
}
}
void mergeSort(int n){
divide(1,n);
}
int main()
{
int n;
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
in.close();
mergeSort(n);
for(int i=1;i<=n;i++)
out<<v[i]<<" ";
out<<"\n";
out.close();
return 0;
}