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;
}
}
}
}