Skip to content

Instantly share code, notes, and snippets.

@uenoku
Created April 26, 2017 00:15
Show Gist options
  • Save uenoku/4557de5656c7bd451ebd4a14f1b8c575 to your computer and use it in GitHub Desktop.
Save uenoku/4557de5656c7bd451ebd4a14f1b8c575 to your computer and use it in GitHub Desktop.
verify radix_sort for 64bit integer
#include "math.h"
#include <algorithm>
#include <set>
#include <complex>
#include <stack>
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <vector>
#include <random>
#define rep(i, n) for (lli i = 0; i < (n); i++)
#define rrep(i, n) for (lli i = (n)-1; i >= 0; i--)
using namespace std;
typedef long long int lli;
bool verify(vector<lli> a, vector<lli> b)
{
rep(i, a.size()) if (a[i] != b[i]) return false;
return true;
}
vector<lli> rn(lli n)
{
std::random_device rnd;
vector<lli> hoge(n);
rep(i, n) hoge[i] = rnd();
return hoge;
}
vector<lli> radix_sort(vector<lli> a)
{
rep(j, 64)
{
vector<lli> b, c;
rep(i, a.size())
{
if ((a[i] >> j) & 1) {
b.push_back(a[i]);
} else {
c.push_back(a[i]);
}
}
rep(i, c.size())
{
a[i] = c[i];
}
rep(i, b.size())
{
a[i + c.size()] = b[i];
}
}
return a;
}
vector<lli> ans(vector<lli> a)
{
sort(a.begin(), a.end());
return a;
}
int main()
{
rep(i, 10)
{
lli size = 1000 * (i + 1) * (i + 1);
auto hoge = rn(size);
//for (auto t : radix_sort(hoge)) {
// cout << t << endl;
//}
cout << "#size= " << size << " "
<< "#ans= " << verify(ans(hoge), radix_sort(hoge)) << endl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment