package main

import (
	"fmt"
)

// Função que implementa o algoritmo Quick Sort para ordenar um array
func quickSort(array []int, inicio, fim int) {
	if inicio < fim {
		indicePivo := particionar(array, inicio, fim)
		quickSort(array, inicio, indicePivo-1) // Ordena a parte esquerda
		quickSort(array, indicePivo+1, fim)   // Ordena a parte direita
	}
}

// Função para particionar o array em relação ao pivô
func particionar(array []int, inicio, fim int) int {
	pivo := array[fim] // Escolhe o último elemento como pivô
	indiceMenor := inicio

	// Reorganiza os elementos menores que o pivô à esquerda
	for j := inicio; j < fim; j++ {
		if array[j] <= pivo {
			array[indiceMenor], array[j] = array[j], array[indiceMenor]
			indiceMenor++
		}
	}

	// Coloca o pivô na posição correta
	array[indiceMenor], array[fim] = array[fim], array[indiceMenor]
	return indiceMenor
}

func main() {
	// Array fixo para simular a entrada do usuário
	numeros := []int{33, 15, 10, 7, 40, 22}

	// Ordenando o array usando Quick Sort
	quickSort(numeros, 0, len(numeros)-1)

	// Exibindo o array ordenado
	fmt.Println("Array ordenado com Quick Sort:")
	for _, num := range numeros {
		fmt.Printf("%d ", num)
	}
	fmt.Println()
}
 
by