Pagini recente » Cod sursa (job #1136365) | Cod sursa (job #2127088) | Cod sursa (job #2329132) | Cod sursa (job #2554608) | Cod sursa (job #1850475)
//batog
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
#define MAX 500010
/*
void afis(int batog[], int rad) {
for (int i = 0; i < rad; i++) {
cout << batog[i] << " ";
}
cout << "\n";
}
void afisv(int v[], int n) {
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
cout << "\n";
}*/
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));
//printf("rad=%d\n", rad);
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;
}
}
}
//afis(batog, rad);
//afisv(v, n);
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;
}
}
//printf("minim=%d\n", minim);
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;
}
}
//printf("minnou=%d\n", minnou);
batog[minim] = minnou;
//afis(batog, rad);
//afisv(v, n);
}
fin.close();
fout.close();
return 0;
}