import random
import numpy as np

"""
def bogoSort(array):
    n = len(array)
    t = 0
    ordenado = False
    while not(ordenado):
        ordenado = True
        for ini in range(1, n):
            if array[ini] < array[ini-1]:
                ordenado = False
                break
        if not(ordenado):
            t += 1
            newOrder = random.sample(range(0, n), n)
            tempA = array.copy()
            for ini in range(0, n):
                tempA[ini] = array[newOrder[ini]]
            array = tempA
    print(t)
    return array
"""

import threading

def bogoSort(array):
    n = len(array)
    t = 0
    ordenado = False
    lock = threading.Lock()  # Create a lock for thread synchronization

    def swap_order(new_order, temp_a, ini):
        with lock:
            temp_a[ini] = array[new_order[ini]]

    while not ordenado:
        ordenado = True
        for ini in range(1, n):
            if array[ini] < array[ini - 1]:
                ordenado = False
                break
        if not ordenado:
            t += 1
            new_order = random.sample(range(0, n), n)
            temp_a = array.copy()
            threads = []

            for ini in range(0, n):
                thread = threading.Thread(target=swap_order, args=(new_order, temp_a, ini))
                threads.append(thread)
                thread.start()

            for thread in threads:
                thread.join()

            array = temp_a
    print("There was",t,"swaps.")
    return array

# a = [4,2,3,4,1]
a = random.sample(range(0,7), 7)
print(a)
a = bogoSort(a)
print(a)