{"id":24532062,"url":"https://github.com/vitoriabarbosa/sort-visualizer","last_synced_at":"2026-02-23T01:06:07.128Z","repository":{"id":251141576,"uuid":"836518830","full_name":"vitoriabarbosa/sort-visualizer","owner":"vitoriabarbosa","description":"O projeto visa desenvolver um visor de algoritmos e ordenação, que localiza os elementos de uma lista em uma certa ordem.","archived":false,"fork":false,"pushed_at":"2024-09-20T03:30:23.000Z","size":632,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-22T09:17:18.381Z","etag":null,"topics":["git","java","sorting-algorithms","swing"],"latest_commit_sha":null,"homepage":"https://gitlab.com/vitoria.gomes/sort-visualizer.git","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitoriabarbosa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-01T02:56:52.000Z","updated_at":"2025-01-17T21:00:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"4ee05df1-2c27-44d1-8d16-b1db756ac64d","html_url":"https://github.com/vitoriabarbosa/sort-visualizer","commit_stats":null,"previous_names":["vitoriabarbosa/sort-visualizer"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitoriabarbosa%2Fsort-visualizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitoriabarbosa%2Fsort-visualizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitoriabarbosa%2Fsort-visualizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitoriabarbosa%2Fsort-visualizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitoriabarbosa","download_url":"https://codeload.github.com/vitoriabarbosa/sort-visualizer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243785078,"owners_count":20347409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","java","sorting-algorithms","swing"],"created_at":"2025-01-22T09:17:20.540Z","updated_at":"2025-10-24T06:14:47.428Z","avatar_url":"https://github.com/vitoriabarbosa.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📊 SAV (Sorting Algorithm Viewer)\n![Exemplo SAV](src/resources/img/sav.png)\n\n## 📋 Introdução\nO projeto visa desenvolver um **visor de algoritmos e ordenação**, um algorítmo que localiza os elementos de uma lista em uma certa ordem.\n\n## 🌟 Funcionalidades\nA ideia é poder mostrar visualmente como a lista **muda** em cada iteraçao, de acordo com o algoritmo de ordenação. Exemplo:\n\n![Exemplo SAV](src/resources/img/sorting.png)\n\n### 🧮 Ordenações utilizadas:\n- **Bubble Sort**: Pequenas e frequentes trocas de elementos adjacentes. A lista gradualmente se ordena de trás para frente.\n- **Insertion Sort**: Elementos são movidos e inseridos gradualmente na posição correta. A parte ordenada cresce à medida que o algoritmo avança.\n- **Quick Sort**: Segmentos da lista são ordenados em diferentes pontos, com partições visíveis onde o pivô divide a lista.\n- **Selection Sort**: O menor elemento é selecionado e trocado com o elemento na posição inicial da parte não ordenada da lista.\n\n### 🧱 Em construção:\n- No fim da ordenação, mostrar o tempo de execução até a ordenação da lista (sem contar com a pausa).\n- Ajustar o layout do painel de ordenação. (detalhes)\n- Exibir o array (em barras no SortPanel) de entrada, antes da ordenação.\n- Melhorar visual do painel de controle.\n- Opção de pausar a ordenação. (?)\n\n## ⚙️ Diagrama de Classe\n```mermaid\nclassDiagram\n    direction LR\n\n    class DataGenerator {\n        +static int[] randomNumbers(numElements: int): int[]\n        +static char[] randomChars(numElements: int): char[]\n    }\n\n\n    class MainApp {\n        +main(args: String[]): void\n    }\n\n    class ArgumentProcessor {\n        +processArguments(args: String[]): ProcessedArgs\n    }\n\n    class ProcessedArgs {\n        +String algorithm\n        +String type\n        +String order\n        +String valueListType\n        +int numElements\n        +String manualValues\n        +int pauseDuration\n        +ProcessedArgs(algorithm: String, type: String, order: String, valueListType: String, numElements: int, manualValues: String, pauseDuration: int)\n    }\n\n    class UtilitiesCLI {\n        +static void getEffectGraphics()\n        +static void getMessageUses()\n        +static void showTitle()\n    }\n\n    class InputValidator {\n        +static boolean validateInput(algorithm: String, type: String, order: String, valueList: String): boolean\n        +static String getAlgorithmFullName(algorithm: String): String\n        +static String getTypeFullName(type: String): String\n        +static String getOrderFullName(order: String): String\n        +static String getValueListFullName(valueList: String): String\n        +static int[] manualInputIntArray(input: String): int[]\n        +static char[] manualInputCharArray(input: String): char[]\n    }\n\n    class SortController {\n        +SortController(panel: SortPanel, pauseDuration: int, order: String)\n        +bubbleSort(array: int[])\n        +bubbleSort(array: char[])\n        +selectionSort(array: int[])\n        +selectionSort(array: char[])\n        +insertionSort(array: int[])\n        +insertionSort(array: char[])\n        +quickSort(array: int[], low: int, high: int)\n        +quickSort(array: char[], low: int, high: int)\n        -panel: SortPanel\n        -pauseDuration: int\n        -ascending: boolean\n    }\n\n    class SortViewerFrame {\n        +SortViewerFrame()\n        +startSorting()\n        -sizeField: JTextField\n        -pauseField: JTextField\n        -algorithmBox: JComboBox\n        -typeBox: JComboBox\n        -orderBox: JComboBox\n        -valueListBox: JComboBox\n        -control: SortController\n        -panel: SortPanel\n    }\n\n    class ButtonUtil {\n        +ButtonUtil(text: String, action: ActionListener)\n        -text: String\n        -action: ActionListener\n    }\n\n    class SortHandler {\n        -control: SortController\n        -panel: SortPanel\n        +SortHandler(control: SortController, panel: SortPanel)\n        +void sort(algorithm: String, array: int[])\n        +void sort(algorithm: String, array: char[])\n    }\n\n    class Sorting {\n        \u003c\u003cabstract\u003e\u003e\n        +Sorting(panel: SortPanel, ascending: boolean, pauseDuration: int)\n        +sort(array: int[])\n        +sort(array: char[])\n        -executeSort(array: int[])\n        -executeSort(array: char[])\n        -highlightBar(index: int)\n        -sleep()\n        -panel: SortPanel\n        -ascending: boolean\n        -pauseDuration: int\n    }\n\n    class BubbleSort {\n        +BubbleSort(panel: SortPanel, ascending: boolean, pauseDuration: int)\n        +sort(array: int[])\n        +sort(array: char[])\n        -executeSort(array: int[])\n        -executeSort(array: char[])\n    }\n\n    class SelectionSort {\n        +SelectionSort(panel: SortPanel, ascending: boolean, pauseDuration: int)\n        +sort(array: int[])\n        +sort(array: char[])\n        -executeSort(array: int[])\n        -executeSort(array: char[])\n    }\n\n    class InsertionSort {\n        +InsertionSort(panel: SortPanel, ascending: boolean, pauseDuration: int)\n        +sort(array: int[])\n        +sort(array: char[])\n        -executeSort(array: int[])\n        -executeSort(array: char[])\n    }\n\n    class QuickSort {\n        +QuickSort(panel: SortPanel, ascending: boolean, pauseDuration: int)\n        +sort(array: int[])\n        +sort(array: char[])\n        -executeSort(array: int[])\n        -executeSort(array: char[])\n        -quickSortHelper(array: int[], low: int, high: int)\n        -partition(array: int[], low: int, high: int): int\n        -quickSortHelper(array: char[], low: int, high: int)\n        -partition(array: char[], low: int, high: int): int\n    }\n\n    class SortPanel {\n        +setIntArray(array: int[])\n        +setCharArray(array: char[])\n        +setCurrentBar(index: int)\n        -paintComponent(g: Graphics)\n        -updateBuffer()\n        -drawArray(g: Graphics, int, int)\n        -getMaxValue(array: int[]): int\n        -getMaxValue(array: char[]): int\n        -intArray: int[]\n        -charArray: char[]\n        -isCharArray: boolean\n        -buffer: BufferedImage\n        -barSpacing: int\n        -currentBar: int\n    }\n\n    MainApp --\u003e ArgumentProcessor : Uses\n    MainApp --\u003e SortViewerFrame : Calls\n    ArgumentProcessor --\u003e ProcessedArgs : Creates\n    ArgumentProcessor --\u003e UtilitiesCLI : Uses\n    ArgumentProcessor --\u003e InputValidator : Validates\n\n    SortHandler --\u003e SortController : Uses\n    SortHandler --\u003e SortPanel : Uses\n    DataGenerator --\u003e SortViewerFrame : Uses\n    SortViewerFrame --\u003e InputValidator : Uses\n    SortViewerFrame --\u003e SortController : Uses\n\n    SortController --\u003e Sorting : Uses\n    Sorting \u003c|-- BubbleSort : Inherits\n    Sorting \u003c|-- SelectionSort : Inherits\n    Sorting \u003c|-- InsertionSort : Inherits\n    Sorting \u003c|-- QuickSort : Inherits\n    SortPanel \u003c-- Sorting : Uses\n\n    SortController --\u003e SortPanel : Uses\n    SortViewerFrame --\u003e ButtonUtil : Uses\n    SortViewerFrame --\u003e SortPanel : Uses\n\n```\n\n## 🛠️ Implementação\n- **Linguagem de Programação:** Java\n    - **Versão utilizada:** JDK 17\n- **Interface Gráfica:** Swing\n- **Controle de Versão:** Git\n\n## 📈 Ordenação Visual (Interface Gráfica)\nAgora você irá visualizar em tempo real os diferentes tipos de ordenação dos elementos (`Bubble Sort`, `Insertion Sort`, `Quick Sort`, `Seletion Sort`).\n\n### 🔝 Você deve entrar com os parâmetro via CLI!\nAbra o terminal e navegue até a pasta do projeto (caso não esteja), e execute os seguintes comandos:\n\n- #### Compilação:\n  Foi usado o arquivo `Makefile` para automatizar o processo de compilação. Para executá-lo basta por `make` no terminal.\n  ```bash\n    make\n  ```\n- #### Execução (Exemplo):\n    - aleatório (caracteres)\n      ```bash\n        java -cp out main.java.MainApp a=b t=c o=az in=r r=20 s=100\n      ```\n    \n    - aleatório (números)\n      ```bash\n        java -cp out main.java.MainApp a=q t=n o=az in=r r=50 s=100\n      ```\n    \n    - manual (caracteres)\n      ```bash\n        java -cp out main.java.MainApp a=s t=c o=za in=m v=\"H,r,x,C,Q,L,w,o,c,z,M,g,p,z,b,R,a,h\" s=100\n      ```\n    \n    - manual (números)\n      ```bash\n        java -cp out main.java.MainApp a=i t=n o=za in=m v=\"-21,50,-3,2,7,17,23,-15,38,12,-4,47,31,0,-10\" s=100\n      ```\n`Path: src/main/java/MainApp.java`\n\n## 📝 Licença\nEste projeto é licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitoriabarbosa%2Fsort-visualizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitoriabarbosa%2Fsort-visualizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitoriabarbosa%2Fsort-visualizer/lists"}