Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Aug 17, 2024. It is now read-only.

Commit 0023c92

Browse files
committed
se han agregado tres nuevo algoritmos de ordenacion
1 parent 38cc5a1 commit 0023c92

File tree

10 files changed

+200
-26
lines changed

10 files changed

+200
-26
lines changed

‎README.md‎

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,6 @@
22

33
Pequeño proyecto para visualziar la ordenacion de un array utilizando el lenguaje de Python y como UI TKinter
44

5-
## Ejecutar programa
6-
7-
Desde la terminal
8-
9-
```bash
10-
python3 main.py
11-
```
12-
13-
## Algoritmos disponibles
14-
15-
- Bubble Sort
16-
175
## Configuración
186

197
Instalar los paquetes/dependencias necesarios
@@ -29,3 +17,18 @@ Iniciar pruebas unitarias
2917
```bash
3018
pytest -v
3119
```
20+
21+
## Ejecutar programa
22+
23+
Desde la terminal
24+
25+
```bash
26+
python3 main.py
27+
```
28+
29+
## Algoritmos disponibles
30+
31+
- Bubble Sort
32+
- Optimized Bubble Sort
33+
- Inserccion Sort
34+
- Selection Sort

‎classes/Configuracion.py‎

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,48 @@
1-
from tkinter import *
21
import tkinter as tk
2+
from tkinter import ttk
3+
from tkinter import *
34

45
class Configuracion:
56

67
def __init__(self, ventanaPrincipal):
8+
# VEntana Toplevel emergente
79
self.settings = Toplevel(ventanaPrincipal)
8-
self.settings.title("Opciones")
10+
self.settings.title('Opciones')
911
self.settings.geometry("{}x{}+{}+{}".format(600, 350, 220, 200))
1012
self.settings.config(bg='white')
1113

12-
self.numBarsSlide=tk.StringVar()
14+
# Input para la cantidad de barras en el array y su animacion
15+
self.numBarsSlide=tk.IntVar()
1316
self.entryNumBars=tk.Scale(self.settings, from_=(2**1), to=(2**8), length=580, resolution=1, sliderlength=15, takefocus=34, orient=HORIZONTAL, label='Data size', variable=self.numBarsSlide)
1417
self.entryNumBars.grid(row=0, column=0, padx=5, pady=5)
1518

19+
# Input para el tiempo de delay
20+
self.timeSlide=tk.IntVar()
21+
self.entrytimeSlide=tk.Scale(self.settings, from_=0.001, to=0.1, length=580, resolution=0.001, sliderlength=30, orient=HORIZONTAL, label='Time', variable=self.timeSlide)
22+
self.entrytimeSlide.grid(row=1, column=0, padx=5, pady=5)
23+
24+
# Checkbox para mostrar el valor de las barras sobre las mismas
1625
self.mostrarTexto = tk.IntVar()
17-
self.btnMostrarTexto = Checkbutton(self.settings, text="Mostrar valor de las barras", variable = self.mostrarTexto, onvalue = 1, offvalue = 0,)
18-
self.btnMostrarTexto.grid(row=1, column=0, padx=10, pady=0, sticky=W)
26+
self.btnMostrarTexto = Checkbutton(self.settings, text='Mostrar valor de las barras', variable = self.mostrarTexto, onvalue = 1, offvalue = 0,)
27+
self.btnMostrarTexto.grid(row=2, column=0, padx=10, pady=0, sticky=W)
1928

29+
# Selecctor de algoritmo de ordenacion
30+
self.selected_alg =tk.StringVar()
31+
self.algoritmSelection = ttk.Combobox(self.settings, textvariable=self.selected_alg,
32+
values=
33+
[
34+
'Bubble Sort',
35+
'Optimized Bubble Sort',
36+
'Inserccion Sort',
37+
'Selection Sort'
38+
]
39+
)
40+
self.algoritmSelection.grid(row=3, column=0, padx=5, pady=5, sticky=W)
41+
self.algoritmSelection.current(0)
42+
43+
# Buton que aplica los cambios en funcion de los valores de los inputs anteriores
2044
self.btnAplicar = Button(self.settings, text='Aplicar', command=self.aplicarSettings)
21-
self.btnAplicar.grid(row=2, column=0, padx=10, pady=0, sticky=W)
45+
self.btnAplicar.grid(row=4, column=0, padx=10, pady=0, sticky=W)
2246

2347
"""Obtener la configuracion para mostrar el Array Sort
2448
@@ -28,14 +52,26 @@ def __init__(self, ventanaPrincipal):
2852
def obtenerConfiguracion(self):
2953
self.settings.wait_window()
3054
# [0]
31-
numBarsSlide = int(self.numBarsSlide.get())
55+
numBarsSlide = self.numBarsSlide.get()
3256
# [1]
57+
timeSlide = self.timeSlide.get()
58+
# [2]
3359
mostrarTexto = self.isChecked(self.mostrarTexto.get())
34-
return (numBarsSlide, mostrarTexto)
60+
# [3]
61+
selectedAlg = self.selected_alg.get()
62+
63+
return (numBarsSlide, timeSlide, mostrarTexto, selectedAlg)
3564

65+
"""Saber si un input de tipo checkbos esta activo o no
66+
67+
Return:
68+
[Boolean] - True si esta marcado, False si no esta marcado
69+
"""
3670
def isChecked(self, value):
3771
if (value == 1): return True
3872
elif (value == 0): return False
3973

74+
"""Aplica los cambios y cierra la ventana Toplevel()
75+
"""
4076
def aplicarSettings(self):
4177
self.settings.destroy()

‎main.py‎

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import threading
12
from tkinter import *
23
from tkinter import ttk
3-
import threading
44

55
# Algoritmos de ordenacion / sorts
6-
from sorts.bubble.bubble import bubble_sort
6+
from sorts.bubble.bubble import *
7+
from sorts.optimizedBubble.optimizedBubble import *
8+
from sorts.inserccion.inserccion import *
9+
from sorts.selection.selection import *
710

811
# Importar clases
912
from classes.Configuracion import Configuracion
@@ -16,7 +19,9 @@ class MainProgram:
1619

1720
# Atributos para configuracion de la animacion
1821
numBars = 16
22+
timeSleep = 0.01
1923
mostrarTextoBarras = False
24+
selectAlgoritm = 'Bubble Sort' # Valor por defecto
2025

2126
def __init__(self):
2227
self.root = Tk()
@@ -94,7 +99,18 @@ def generate(self):
9499
self.drawData(self.data, ['#9370DB' for x in range(len(self.data))])
95100

96101
def startAlgorithm(self):
97-
bubble_sort(self.data, self.drawData, 0.01)
102+
if self.selectAlgoritm == 'Bubble Sort':
103+
bubble_sort(self.data, self.drawData, self.timeSleep)
104+
105+
elif self.selectAlgoritm == 'Optimized Bubble Sort':
106+
optimizedBubble_sort(self.data, self.drawData, self.timeSleep)
107+
108+
elif self.selectAlgoritm == 'Inserccion Sort':
109+
inserccion_sort(self.data, self.drawData, self.timeSleep)
110+
111+
elif self.selectAlgoritm == 'Selection Sort':
112+
selection_sort(self.data, self.drawData, self.timeSleep)
113+
98114

99115
def initGenerate(self):
100116
self.data = arraySort.initArray(self.data, self.numBars)
@@ -103,8 +119,16 @@ def initGenerate(self):
103119
def openSettings(self):
104120
settings=Configuracion(self.root)
105121
dataSettings=settings.obtenerConfiguracion()
122+
# [0]
106123
self.numBars = dataSettings[0]
107-
self.mostrarTextoBarras = dataSettings[1]
124+
# [1]
125+
self.timeSleep = dataSettings[1]
126+
# [2]
127+
self.mostrarTextoBarras = dataSettings[2]
128+
# [3]
129+
self.selectAlgoritm = dataSettings[3]
130+
131+
self.root.title("Array sort visualizer - " + self.selectAlgoritm)
108132
self.initGenerate()
109133

110134
if __name__ == '__main__':

‎sorts/bubble/bubble.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
import time
22

33
def bubble_sort(data, drawData=None, timeTick=0):
4-
for _ in range(len(data)):
4+
for i in range(len(data)):
5+
56
for j in range(len(data) - 1):
7+
68
if data[j] > data[j+1]:
79
data[j], data[j+1] = data[j+1], data[j]
8-
if drawData != None:
10+
11+
if drawData != None:
912
drawData(data, ['#4682B4' if x == j + 1 else "#9370DB" for x in range(len(data))])
13+
1014
time.sleep(timeTick)
15+
1116
if drawData != None:
1217
drawData(data, ['#4682B4' for x in range(len(data))])
18+
1319
return data

‎sorts/inserccion/inserccion.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import time
2+
3+
def inserccion_sort(data, drawData=None, timeTick=0):
4+
n = len(data)
5+
6+
for i in range(n):
7+
pos = i
8+
aux = data[i]
9+
10+
while pos > 0 and data[pos - 1] > aux:
11+
data[pos] = data[pos - 1]
12+
pos-=1
13+
data[pos] = aux
14+
15+
# Dibujar datos
16+
if drawData != None:
17+
drawData(data, ['#4682B4' if x == i + 1 else "#9370DB" for x in range(len(data))])
18+
19+
# retardo
20+
time.sleep(timeTick)
21+
22+
return data

‎sorts/inserccion/test_inserccion.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import unittest
2+
from inserccion import inserccion_sort
3+
4+
class TestInserccionSort(unittest.TestCase):
5+
data = [2, 7, 0, 1, 9, 6, 8, 3, 4, 5]
6+
7+
def test_1(self):
8+
array = inserccion_sort(self.data)
9+
self.assertEqual(array, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import time
2+
3+
def optimizedBubble_sort(data, drawData=None, timeTick=0):
4+
n = len(data)
5+
6+
for i in range(n):
7+
swapped = False
8+
9+
for j in range(0, n-i-1):
10+
# swap values
11+
if data[j] > data[j+1]:
12+
data[j], data[j+1] = data[j+1], data[j]
13+
swapped = True
14+
15+
# Dibujar datos
16+
if drawData != None:
17+
drawData(data, ['#4682B4' if x == j + 1 else "#9370DB" for x in range(len(data))])
18+
19+
# retardo
20+
time.sleep(timeTick)
21+
22+
# si no ha hecho swap values
23+
if swapped == False:
24+
break
25+
26+
if drawData != None:
27+
drawData(data, ['#4682B4' for x in range(len(data))])
28+
29+
return data
30+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import unittest
2+
from optimizedBubble import optimizedBubble_sort
3+
4+
class TestBubbleSort(unittest.TestCase):
5+
data = [2, 7, 0, 1, 9, 6, 8, 3, 4, 5]
6+
7+
def test_1(self):
8+
array = optimizedBubble_sort(self.data)
9+
self.assertEqual(array, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

‎sorts/selection/selection.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import time
2+
3+
def selection_sort(data, drawData=None, timeTick=0):
4+
n = len(data)
5+
6+
for i in range(n):
7+
min = i
8+
j = i + 1
9+
10+
for j in range(n):
11+
if (data[j] > data[min]):
12+
min = j
13+
14+
data[i], data[min] = data[min], data[i]
15+
16+
# Dibujar datos
17+
if drawData != None:
18+
drawData(data, ['#4682B4' if x == i + 1 else "#9370DB" for x in range(len(data))])
19+
20+
# retardo
21+
time.sleep(timeTick)
22+
23+
if drawData != None:
24+
drawData(data, ['#4682B4' for x in range(len(data))])
25+
26+
return data

‎sorts/selection/test_selection.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import unittest
2+
from selection import selection_sort
3+
4+
class TestSelectionSort(unittest.TestCase):
5+
data = [2, 7, 0, 1, 9, 6, 8, 3, 4, 5]
6+
7+
def test_1(self):
8+
array = selection_sort(self.data)
9+
self.assertEqual(array, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /