Pagini recente » Cod sursa (job #1056240) | Cod sursa (job #2897008) | Cod sursa (job #2647973) | Cod sursa (job #380289) | Cod sursa (job #1850478)
//batog
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
#define MAX 500010
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
//batog - indici
int n, v[MAX], batog[750], rad, minim, minnou;
fin >> n;
for (int i = 0; i < n; i++) {
fin >> v[i];
}
rad = ceil(sqrt(n));
for (int i = 0; i < rad && i * rad < n; i++) {
batog[i] = i * rad;
for (int j = 1; j < rad && i * rad + j < n; j++) {
if (v[i * rad + j] < v[batog[i]]) {
batog[i] = i * rad + j;
}
}
}
for (int i = 0; i < n; i++) {
//minim - indicele minimului din vector in batog
//minnou - indicele in vector al noului minim din acel segment
minim = 0;
for (int j = 1; j < rad && j * rad < n; j++) {
if (v[batog[j]] < v[batog[minim]]) {
minim = j;
}
}
fout << v[batog[minim]] << " ";
minnou = minim * rad;
v[batog[minim]] = 2147483647;
for (int j = minim * rad + 1; j < (minim + 1) * rad && j < n; j++) {
if (v[j] < v[minnou]) {
minnou = j;
}
}
batog[minim] = minnou;
}
fin.close();
fout.close();
return 0;
}