use the new sorting functions

This commit is contained in:
Ahmet Inan 2024-03-07 22:04:09 +01:00
commit 957eb6f784
5 changed files with 16 additions and 40 deletions

View file

@ -6,6 +6,7 @@ Copyright 2020 Ahmet Inan <inan@aicodix.de>
#pragma once
#include "sort.hh"
#include "polar_helper.hh"
namespace CODE {
@ -61,16 +62,7 @@ struct PolarListNode<TYPE, 0>
else
fork[2*k+1] += sft.v[k];
int perm[2*TYPE::SIZE];
perm[0] = 0;
for (int i = 1, j; i < 2*TYPE::SIZE; ++i) {
PATH t = fork[i];
for (j = i; j > 0 && fork[j-1] > t; --j) {
fork[j] = fork[j-1];
perm[j] = perm[j-1];
}
fork[j] = t;
perm[j] = i;
}
CODE::insertion_sort(perm, fork, 2*TYPE::SIZE);
for (int k = 0; k < TYPE::SIZE; ++k)
metric[k] = fork[k];
MAP map;

View file

@ -6,6 +6,7 @@ Copyright 2023 Ahmet Inan <inan@aicodix.de>
#pragma once
#include "sort.hh"
#include "polar_helper.hh"
namespace CODE {
@ -118,16 +119,7 @@ struct PolarParityNode<TYPE, 0>
fork[2*k+1] = 1000000;
}
int perm[2*TYPE::SIZE];
perm[0] = 0;
for (int i = 1, j; i < 2*TYPE::SIZE; ++i) {
PATH t = fork[i];
for (j = i; j > 0 && fork[j-1] > t; --j) {
fork[j] = fork[j-1];
perm[j] = perm[j-1];
}
fork[j] = t;
perm[j] = i;
}
CODE::insertion_sort(perm, fork, 2*TYPE::SIZE);
for (int k = 0; k < TYPE::SIZE; ++k)
metric[k] = fork[k];
MAP map;

View file

@ -6,32 +6,20 @@ Copyright 2024 Ahmet Inan <inan@aicodix.de>
#pragma once
#include "sort.hh"
template <typename TYPE, int WIDTH>
static inline SIMD<typename SIMD<TYPE, WIDTH>::uint_type, WIDTH> vorder(SIMD<TYPE, WIDTH> a)
{
SIMD<typename SIMD<TYPE, WIDTH>::uint_type, WIDTH> p;
p.v[0] = 0;
for (int i = 1, j; i < WIDTH; ++i) {
TYPE t = a.v[i];
for (j = i; j > 0 && a.v[j-1] > t; --j) {
a.v[j] = a.v[j-1];
p.v[j] = p.v[j-1];
}
a.v[j] = t;
p.v[j] = i;
}
CODE::insertion_sort(p.v, a.v, WIDTH);
return p;
}
template <typename TYPE, int WIDTH>
static inline SIMD<TYPE, WIDTH> vsort(SIMD<TYPE, WIDTH> a)
{
for (int i = 1, j; i < WIDTH; ++i) {
TYPE t = a.v[i];
for (j = i; j > 0 && a.v[j-1] > t; --j)
a.v[j] = a.v[j-1];
a.v[j] = t;
}
CODE::insertion_sort(a.v, WIDTH);
return a;
}

View file

@ -6,6 +6,8 @@ Copyright 2024 Ahmet Inan <inan@aicodix.de>
#pragma once
namespace CODE {
template <typename TYPE>
static void insertion_sort(TYPE *a, int n)
{
@ -17,8 +19,8 @@ static void insertion_sort(TYPE *a, int n)
}
}
template <typename TYPE>
static void insertion_sort(int *p, TYPE *a, int n)
template <typename INDEX, typename TYPE>
static void insertion_sort(INDEX *p, TYPE *a, int n)
{
p[0] = 0;
for (int i = 1, j; i < n; ++i) {
@ -32,3 +34,5 @@ static void insertion_sort(int *p, TYPE *a, int n)
}
}
}

View file

@ -23,13 +23,13 @@ int main()
for (int i = 0; i < size; ++i)
a[i] = b[i] = c[i] = d[i] = rand();
std::sort(a, a+size);
insertion_sort(b, size);
CODE::insertion_sort(b, size);
for (int i = 0; i < size; ++i)
assert(a[i] == b[i]);
for (int i = 0; i < size; ++i)
e[i] = i;
std::stable_sort(e, e+size, [c](int i, int j){ return c[i] < c[j]; });
insertion_sort(f, d, size);
CODE::insertion_sort(f, d, size);
for (int i = 0; i < size; ++i)
assert(e[i] == f[i]);
}