Created
May 12, 2024 06:56
-
-
Save zamabuvaraeu/49ab2beac879cef3b4d49a67ce7ba2ab to your computer and use it in GitHub Desktop.
Сортировка массива библиотечной функцией qsort
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include once "crt.bi" | |
' Функция‐компаратор | |
' Такая функция принимает два аргумента и возвращает значение | |
' какой из этих аргументов больше, меньше или они равны | |
' Функция должна быть отмечена как "cdecl" | |
Function Comparator cdecl(ByVal p As Const Any Ptr, ByVal q As Const Any Ptr) As Long | |
Dim px As Integer Ptr = CPtr(Integer Ptr, p) | |
Dim py As Integer Ptr = CPtr(Integer Ptr, q) | |
' Для сортировки по возрастанию | |
If *px > *py Then | |
' Возвращаем 1 когда первый элемент больше | |
Return 1 | |
Else | |
If *py > *px Then | |
' Возвращаем -1 когда второй элемент больше | |
Return -1 | |
End If | |
End If | |
' Когда элементы равны, возвращаем 0 | |
Return 0 | |
End Function | |
' Вводим массив чисел | |
Dim Vector(9) As Integer | |
For i As Integer = LBound(Vector) To UBound(Vector) | |
Vector(i) = rand() | |
Print i, Vector(i) | |
Next | |
' Сортировать | |
qsort( _ | |
@Vector(0), _ /' Функция требует указатель на начало массива '/ | |
10, _ /' Количество элементов в массиве '/ | |
SizeOf(Integer), _ /' Размер одного элемента '/ | |
@Comparator _ /' Адрес функции-компаратора '/ | |
) | |
' Распечатываем | |
For i As Integer = LBound(Vector) To UBound(Vector) | |
Print i, Vector(i) | |
Next |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment