15 if (count <= 1 || !temp_keys || !temp_values) {
21 uint32_t* src_values = values;
22 uint32_t* dst_values = temp_values;
26 for (
int pass = 0; pass < 8; ++pass) {
27 uint32_t counts[256] = { 0 };
28 uint32_t offsets[256] = { 0 };
32 for (uint32_t i = 0; i < count; ++i) {
33 uint8_t bucket = (uint8_t)((src_keys[i] >> shift) & 0xFF);
38 uint32_t total_offset = 0;
39 for (uint32_t i = 0; i < 256; ++i) {
40 offsets[i] = total_offset;
41 total_offset += counts[i];
45 for (uint32_t i = 0; i < count; ++i) {
46 uint8_t bucket = (uint8_t)((src_keys[i] >> shift) & 0xFF);
47 uint32_t pos = offsets[bucket]++;
48 dst_keys[pos] = src_keys[i];
49 dst_values[pos] = src_values[i];
57 uint32_t* tv = src_values;
58 src_values = dst_values;
void sbgl_radix_sort(sbgl_SortKey *keys, uint32_t *values, uint32_t count, sbgl_SortKey *temp_keys, uint32_t *temp_values)
Performs a stable radix sort on an array of 64-bit keys and associated 32-bit values.