-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBubbleSort(fixed).rb
More file actions
137 lines (112 loc) · 3.14 KB
/
BubbleSort(fixed).rb
File metadata and controls
137 lines (112 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Minifunção para verificar item que tem a maior quantidade de digitos
def maiorDigito(lista)
maiorDigito = "0"
for c in lista
if c.length > maiorDigito.length
maiorDigito = c
end
end
return maiorDigito.length
end
# Minifunção para colocar 0 a esquerda
def organizandoNum(numero)
numero = numero.rjust(maiorDigito($lista), "0")
return numero
end
# Organizando numeros para terem a memsa quantidade de digitos
def listaReestruturada(lista)
print ">>", lista
for i in 0..lista.length - 1
if lista[i].length < maiorDigito($lista)
lista[i] = organizandoNum(lista[i])
end
end
return lista
end
# Saida organizada e "responsiva" kk
def saidaMunita(lista, verificando)
print "\e[2J\e[f"
print "Verificando:\n"
for c in lista
print c, " "
end
print "\n#{((" " * maiorDigito($lista)) + " ") * verificando}#{(("-" * maiorDigito($lista)) * 2) + ("-" * 1)}"
print "\n\nEstado: \n"
unless lista[verificando] > lista[verificando + 1] # Mesma verificação do bubblecore, apenas para printar se tem modificações antes de ser modificado
print ">> Ok\n"
else
print "De: #{lista[verificando]} | #{lista[verificando + 1]}\n"
print "Para: #{lista[verificando + 1]} | #{lista[verificando]}"
end
print "\n\nPrecione qualquer tecla para continuar.."
pause = gets
end
# É o core, o "nucleo" principal do programa
def bubblecore()
lista = listaReestruturada($lista)
trocas = 0
# Loop com a condição que SE NÃO TIVER MAS TROCAS ELE SAIR DO LOOP
loop do
trocas = 0
for c in 0..lista.length - 2
numAtual = lista[c]
numProximo = lista[c + 1]
saidaMunita(lista, c) # Chamando a a função para fazer o print
# Verificando se um numero é maior que o outro e fazendo a troca
if numAtual > numProximo
print " Fazendo uma troca\n"
numSalvo = numAtual
lista[c] = numProximo
lista[c + 1] = numSalvo
trocas += 1 # Variavel usada para saber se tiveram trocas
end
end
# IF que faz quebra o loop se não tiver mas trocas
if trocas == 0
print "\e[2J\e[f"
puts "A lista de numeros foi organizada"
print ">> "
for i in lista
print "#{i} "
end
break
end
end
end
def gerarNumeros()
print "Digite a quantidade de numeros da lista: "
num = gets.chomp.to_i
lista = []
for c in 1..num
numero = rand(num)
while lista.include?("#{numero}") == true
numero = rand(num)
end
lista << numero.to_s
end
return lista
end
def main()
print "Digite 1 para numeros automaticos ou 2 para entrada manual [1/2]: "
entrada = gets.chomp.to_i
if entrada == 1
numeros = gerarNumeros()
print "Lista: "
numeros.each do |numero|
print "#{numero} "
end
print "\n\nPrecione qualquer tecla para iniciar.."
pause = gets
$lista = numeros
#$lista = ["4", "31", "8", "40", "73", "28", "93", "56", "97", "77"]
bubblecore()
elsif entrada == 2
print "Digite a lista de numeros:\n>>> "
$lista = gets.chomp.strip.split(" ")
bubblecore()
else
print "\nEntrada incorreta digite novamente: "
main()
end
end
main()