mirror of
https://github.com/aicodix/code.git
synced 2026-04-27 14:30:36 +00:00
use the new sorting functions
This commit is contained in:
parent
524571e6fb
commit
957eb6f784
5 changed files with 16 additions and 40 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
20
simd_sort.hh
20
simd_sort.hh
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
8
sort.hh
8
sort.hh
|
|
@ -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)
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue