Created
May 20, 2020 02:54
-
-
Save RafaelPlantard/2a1a9a3cd23dbde4c5243e60eef380cd to your computer and use it in GitHub Desktop.
Bubble Sort
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
/* | |
int* lhs: ponteiro de int | |
int* rhs: pointeiro de int | |
*/ | |
void swap(int* lhs, int* rhs) { | |
// primeiramente a função armazena o valor que está contido no ponteiro do primeiro argumento (lhs) | |
// isso permite que possamos alterar o valor contido pelo ponteiro *lhs sem perder o valor original que estava em *lhs. | |
int aux = *lhs; | |
// Uma vez salvo o valor de *lhs em uma variável auxiliar, podemos simplesmente fazer a troca. | |
// Primeiramente pegamos o valor que está no ponteiro rhs, e atualizamos o valor de lhs, usando o operador * para pegar o valor da variável | |
// Do contrário estaríamos atualizando os ponteiros e não os seus valores. | |
*lhs = *rhs; | |
// Fazemos a recuperação do valor de aux que contém o valor original que estava em *lhs antes da troca, e com isso | |
// atualizamos a varíavel *rhs concluindo a troca dos valores que estavam nos 2 ponteiros: | |
// lhs -> aux | |
// rhs -> lhs | |
// aux -> rhs | |
*rhs = aux; | |
} | |
/* | |
int vec[]: um vetor de inteiros | |
int size: tamanho do vetor de inteiros passado no 1º parâmetro | |
*/ | |
void bubbleSort(int vec[], int size) | |
{ | |
// variáveis auxiliares dos 2 fors. | |
int i, j; | |
// primeiramente for é para percorrer todos os itens do vetor. | |
for (i = 0; i < size - 1; i++) | |
{ | |
// percorre o vetor até o final a partir da próxima posição de i atual | |
for (j = i + 1; j < size; j++) | |
{ | |
// se a posição atual de i do vetor for maior que a próxima posição (representada por j), então é efetuada a troca. | |
if (vec[i] > vec[j]) | |
{ | |
// troca as posições baseadas nos ponteiros. | |
swap(&vec[i], &vec[j]); | |
} | |
} | |
} | |
} | |
void print(int vec[], int size) { | |
for (int i = 0; i < size; i++) { | |
printf("%d, ", vec[i]); | |
} | |
printf("\n"); | |
} | |
int main() { | |
int vec[] = {6, 2, 1, 4, 3, 7, 9, 8, 5, 10}; | |
int size = sizeof(vec) / sizeof(int); | |
print(vec, size); | |
bubbleSort(vec, size); | |
print(vec, size); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment