Parallel Sort
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int n;
int mat[100][100];
int main()
{
fstream fin("input.txt");
fin >> n;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
fin >> mat[i][j];
}
int v = log((double)n) / log(2.0);
for(int iter = 0; iter < v ; iter++)// 로그엔번
{
for(int i = 0; i < n; i ++)
{
for(int k = 0; k < n; k ++)
{
for(int j = 0; j + 1 < n; j += 2)
{
if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
for(int j = 1; j + 1 < n; j += 2)
{
if( (i % 2) == 0 && mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
else if( (i % 2) == 1 && mat[i][j] < mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
}
}
cout << endl;
/// 수직 검사
for(int j = 0; j < n; j ++){
for(int k = 0; k < n; k ++)
{
for(int i = 0; i + 1 < n; i += 2)
{
if( mat[i][j] > mat[i + 1][j])
std::swap(mat[i][j], mat[i + 1][j]);
}
for(int i = 1; i + 1 < n; i += 2)
{
if( mat[i][j] > mat[i + 1][j])
std::swap(mat[i][j], mat[i + 1][j]);
}
}
}
}
for(int i = 0; i < n; i ++)
{
for(int k = 0; k < n; k ++)
{
for(int j = 0; j + 1 < n; j += 2)
{
if( mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
for(int j = 1; j + 1 < n; j += 2)
{
if( mat[i][j] > mat[i][j + 1])
{
std::swap(mat[i][j], mat[i][j + 1]);
}
}
}
}
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
cout << mat[i][j] << " ";
cout << endl;
}
}