Looking for a c++ function for sorting an array of floats and returning the sorted results + index

you can try to sort the array by bubble sort…

.h file


#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "MyBubbleSort.generated.h"

UCLASS(Blueprintable)
class YOUR-PROJECT_API UMyBubbleSort  : public UObject
{
    GENERATED_BODY()

public:

    UFUNCTION(BlueprintCallable, Category = "TOOT")
    void BubbleSortFloatArr(const TArray<float> SrcArr, TArray<float>& ResultArr , TArray<int32>& ResultIdxArr);
};

.cpp file:


#include  "MyBubbleSort.h"

void UMyBubbleSort::BubbleSortFloatArr(const TArray<float> SrcArr, TArray<float> & ResultArr, TArray<int32> & ResultIdxArr)
{
    if(SrcArr.IsEmpty()) return;
    //
    int srcLen = SrcArr.Num()  ;
      ResultArr.Init(0.0, srcLen );
      ResultIdxArr.Init(0, srcLen );
      float* valPtr = ResultArr.GetData();
      int32* idxPtr = ResultIdxArr.GetData();
      //
    for (int i = 0 ; i < srcLen; ++i) {
        *(valPtr + i) = SrcArr[i] ;
        *(idxPtr + i) = i;
    }

    if (srcLen < 2) {
        return;
    }

    for (int i = 0 ; i < srcLen   ;  i++) {
        for (int j = 0 ; j < srcLen - 1 ;  j++) {
            if( *(valPtr + j + 1) > *(valPtr + j  )){
                 float tmpV =  *(valPtr + j  );
                 *(valPtr + j  ) = *(valPtr + j + 1);
                 *(valPtr + j + 1) = tmpV;
                 int32 tmpV2 = *(idxPtr + j  );
                 *(idxPtr + j  ) = *(idxPtr + j + 1);
                 *(idxPtr + j + 1) = tmpV2;
            }
        }
    }
}