52 lines
1.0 KiB
C++
52 lines
1.0 KiB
C++
|
|
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;
|
||
|
|
}
|