-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpuntoextra.py
60 lines (53 loc) · 2.56 KB
/
puntoextra.py
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
#Implementacion de quicksort aleatorio
#por el metodo de particion lomuto's
import random
from time import time
_autor_ = 'Leonel Santiago Rosas'
def particion(arreglo, inicio, tope):
pivote = inicio
i = inicio +1
for j in range(inicio+1, tope + 1):
#si el tamano del elemento es pequeno o igual al pivote
#desplaxamos a la derecha la particion
if arreglo[j] <= arreglo[pivote]:
arreglo[i], arreglo[j] = arreglo[j], arreglo[i]
i = i+1
arreglo[pivote], arreglo[i-1] = arreglo[i-1], arreglo[pivote]
pivote = i - 1
return (pivote)
#funcion que nos permite obtener el pivote de manera aleatoria
def particionaleatoria(arregloapartir, inicio, tope):
#Creamos una posicion aleatoria para el pivote
pivotealeatorio = random.randrange(inicio, tope)
#Cambiamos de posiciones los arreglos
arregloapartir[inicio] , arregloapartir[pivotealeatorio] = arregloapartir[pivotealeatorio], arregloapartir[inicio]
return particion(arregloapartir, inicio, tope)
#Definimos el metodo quick sort
def quicksort(arreglorecibido, inicio, tope):
#Comprovamos si es necesario el ordenamiento
if (inicio < tope):
#mandamos a llamar la funcion que nos permite el uso de un pivote obtenido de manera aleatoria
pivote = particionaleatoria(arreglorecibido, inicio, tope)
quicksort(arreglorecibido, inicio, pivote-1)
quicksort(arreglorecibido, pivote+1, tope)
from random import sample
tamano = int(input("Ingresa el tamano del arreglo: \t"))
from fileinput import filename
arreglocreado=sample(range(0,tamano),tamano) #Creamos el arreglo de numeros que no se repiten
tamanodelArreglo = len(arreglocreado) #obtenemos el tamano del arreglo
tiempoInicialDeEjecucion = time() #iniciamos el cronometro
quicksort(arreglocreado, 0, tamanodelArreglo-1) #Mandamos a llamar el metodo quick sort
tiempoFinalDeEjecucion = time()
tiempoFinal = tiempoFinalDeEjecucion - tiempoInicialDeEjecucion #sacamos el tiempo final de jecucion del merge sort
#print(arreglocreado)
print("Tiempo del ordenamiento de datos: ", tiempoFinal)
#Funcion oara encontrar el elemento de la mitad de la pila
tiempodeEncontrarelElementoInicial = time()
mitaddelarreglo = int (tamanodelArreglo/2)
if(tamanodelArreglo %2):
print(arreglocreado[mitaddelarreglo])
else:
print(arreglocreado[mitaddelarreglo-1], ",", arreglocreado[mitaddelarreglo])
tiempoFinalDeEncontrarelElemento = time()
tiempototal = tiempoFinalDeEncontrarelElemento - tiempodeEncontrarelElementoInicial
print("tiempo de encontrar el elemento:",tiempototal)