Structure CustomStruct
	Value$
EndStructure

; Сортировка по числовому значению в строковом элементе структуры.
Procedure CustomCompare(*a.CustomStruct, *b.CustomStruct)
	If Val(*a\Value$) < Val(*b\Value$)
		ProcedureReturn #PB_Sort_Lesser
	ElseIf Val(*a\Value$) > Val(*b\Value$)
		ProcedureReturn #PB_Sort_Greater
	Else
		ProcedureReturn #PB_Sort_Equal
	EndIf
EndProcedure

Dim Test.CustomStruct(6)

Test(0)\Value$ = "0005"
Test(1)\Value$ = "2"
Test(2)\Value$ = "42"
Test(3)\Value$ = "7"
Test(4)\Value$ = "23"
Test(5)\Value$ = "100"
Test(6)\Value$ = "101"

CustomSortArray(Test(), @CustomCompare(), #PB_Sort_Ascending)

For i = 0 To 6
	Debug Test(i)\Value$
Next


; Сортировать элементы с плавающей запятой по абсолютному значению (игнорируя знак)
Procedure AbsCompare(*a.Float, *b.Float)
	If Abs(*a\f) < Abs(*b\f)
		ProcedureReturn #PB_Sort_Lesser
	ElseIf Abs(*a\f) > Abs(*b\f)
		ProcedureReturn #PB_Sort_Greater
	Else
		ProcedureReturn #PB_Sort_Equal
	EndIf
EndProcedure

Dim Test.f(4)
Test(0) = 2.5
Test(1) = -3.0
Test(2) = 0
Test(3) = 12
Test(4) = -100

CustomSortArray(Test(), @AbsCompare())

For i = 0 To 4
	Debug Test(i)
Next