magyarsort/simd-sort/partition.cpp

52 lines
1.0 KiB
C++
Raw Normal View History

void scalar_partition_epi32(uint32_t* array, const uint32_t pivot, int& left, int& right) {
while (left <= right) {
while (array[left] < pivot) {
left += 1;
}
while (array[right] > pivot) {
right -= 1;
}
if (left <= right) {
const uint32_t t = array[left];
array[left] = array[right];
array[right] = t;
left += 1;
right -= 1;
}
}
}
int lomuto_partition_epi32(uint32_t* array, int lo, int hi) {
const uint32_t pivot = array[(lo + hi)/2];
const uint32_t hi_value = array[hi];
array[(lo + hi)/2] = hi_value;
array[hi] = pivot;
int i = lo;
for (int j=lo; j < hi; j++) {
if (array[j] <= pivot) {
const uint32_t t = array[i];
array[i] = array[j];
array[j] = t;
i += 1;
}
}
{
const uint32_t t = array[i];
array[i] = array[hi];
array[hi] = t;
i += 1;
}
return i;
}