Skip to content

Instantly share code, notes, and snippets.

@zamabuvaraeu
Created May 12, 2024 06:56
Show Gist options
  • Save zamabuvaraeu/49ab2beac879cef3b4d49a67ce7ba2ab to your computer and use it in GitHub Desktop.
Save zamabuvaraeu/49ab2beac879cef3b4d49a67ce7ba2ab to your computer and use it in GitHub Desktop.
Сортировка массива библиотечной функцией qsort
#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