@@ -628,9 +628,7 @@ X86_SIMD_SORT_INLINE type_t get_pivot_32bit(type_t *arr,
628
628
629
629
template <typename vtype, typename type_t >
630
630
static void
631
- qselect_32bit_ (type_t *arr, int64_t k,
632
- int64_t left, int64_t right,
633
- int64_t max_iters)
631
+ qsort_32bit_ (type_t *arr, int64_t left, int64_t right, int64_t max_iters)
634
632
{
635
633
/*
636
634
* Resort to std::sort if quicksort isnt making any progress
@@ -652,15 +650,17 @@ qselect_32bit_(type_t *arr, int64_t k,
652
650
type_t biggest = vtype::type_min ();
653
651
int64_t pivot_index = partition_avx512<vtype>(
654
652
arr, left, right + 1 , pivot, &smallest, &biggest);
655
- if (( pivot != smallest) && (k <= pivot_index) )
656
- qselect_32bit_ <vtype>(arr, k , left, pivot_index - 1 , max_iters - 1 );
657
- else if (( pivot != biggest) && (k > pivot_index) )
658
- qselect_32bit_ <vtype>(arr, k , pivot_index, right, max_iters - 1 );
653
+ if (pivot != smallest)
654
+ qsort_32bit_ <vtype>(arr, left, pivot_index - 1 , max_iters - 1 );
655
+ if (pivot != biggest)
656
+ qsort_32bit_ <vtype>(arr, pivot_index, right, max_iters - 1 );
659
657
}
660
658
661
659
template <typename vtype, typename type_t >
662
660
static void
663
- qsort_32bit_ (type_t *arr, int64_t left, int64_t right, int64_t max_iters)
661
+ qselect_32bit_ (type_t *arr, int64_t pos,
662
+ int64_t left, int64_t right,
663
+ int64_t max_iters)
664
664
{
665
665
/*
666
666
* Resort to std::sort if quicksort isnt making any progress
@@ -682,10 +682,10 @@ qsort_32bit_(type_t *arr, int64_t left, int64_t right, int64_t max_iters)
682
682
type_t biggest = vtype::type_min ();
683
683
int64_t pivot_index = partition_avx512<vtype>(
684
684
arr, left, right + 1 , pivot, &smallest, &biggest);
685
- if (pivot != smallest)
686
- qsort_32bit_ <vtype>(arr, left, pivot_index - 1 , max_iters - 1 );
687
- if (pivot != biggest)
688
- qsort_32bit_ <vtype>(arr, pivot_index, right, max_iters - 1 );
685
+ if (( pivot != smallest) && (pos < pivot_index) )
686
+ qselect_32bit_ <vtype>(arr, pos , left, pivot_index - 1 , max_iters - 1 );
687
+ else if (( pivot != biggest) && (pos >= pivot_index) )
688
+ qselect_32bit_ <vtype>(arr, pos , pivot_index, right, max_iters - 1 );
689
689
}
690
690
691
691
X86_SIMD_SORT_INLINE int64_t replace_nan_with_inf (float *arr, int64_t arrsize)
0 commit comments