Алгоритм сборки обезьяньей сортировки: пример кода и объяснение

“Обезьянья сортировка” — это термин, используемый для описания особенно неэффективного и случайного алгоритма сортировки. Он предполагает случайную перестановку элементов списка до тех пор, пока они не окажутся в желаемом порядке. Хотя этот алгоритм непрактичен для реального использования, я могу предоставить вам пример реализации на языке ассемблера.

Вот пример алгоритма «обезьяньей сортировки», реализованного на сборке x86:

section .data
    array db 4, 2, 3, 1, 5
section .text
    global _start
_start:
    ; Calculate the length of the array
    mov ecx, array_length
    mov edx, 0
loop_start:
    ; Check if the array is sorted
    mov esi, 0
    mov ebx, array
inner_loop:
    cmp byte [ebx], [ebx + 1]
    jle not_swapped
    ; Swap elements if they are out of order
    mov al, [ebx]
    mov ah, [ebx + 1]
    mov [ebx], ah
    mov [ebx + 1], al
    ; Set the flag indicating a swap occurred
    mov esi, 1
not_swapped:
    inc ebx
    dec ecx
    cmp ecx, 1
    jne inner_loop
    ; If a swap occurred, start over
    cmp esi, 1
    jne loop_end
    jmp loop_start
loop_end:
    ; Exit the program
    mov eax, 1
    xor ebx, ebx
    int 0x80
section .bss
    array_length resd 1

Обратите внимание, что данная реализация представлена ​​исключительно в иллюстративных целях и не предназначена для практического использования. Алгоритм обезьяньей сортировки имеет среднюю временную сложность O(n!) и крайне неэффективен.