Python - Python - Metodo de ordenamiento Impar-Par

 
Vista:

Python - Metodo de ordenamiento Impar-Par

Publicado por José Alberto (1 intervención) el 03/06/2020 17:59:58
Hola disculpen tengo un problema con un código, apenas estoy aprendiendo y quería saber si me podrían ayudar.
Estoy realizando un ordenamiento de datos por el método impar-par, es decir empieza tomando el primer valor del arreglo y lo compara con el segundo, si el primero es mayor que el segundo, intercambia su posición, después va con el 3° y 4°, así consecutivamente, ya que termina hace lo mismo pero empezando con los pares es decir el 2° con el 3° y así.
Llevo esto y empieza bien, pero no se como hacer para que se repita el proceso varias veces, al ponerle un while o repetir el for de nones, empieza con los valores iniciales, espero me puedan ayudar, gracias

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
n = 0
m = 0
a = []
x = int(input("¿Cuantos valores desea ordenar?: "))
for k in range (0,x):
    a.append(int(input("Dame el {0}° valor: ".format(k+1))))
print(a)
r = x
def nones():
  for n in range (0,x,2):
    for m in range (1,x,2):
      if(a[n]>a[m]):
        a[n],a[m]=a[m],a[n]
  print(a)
 
def pares():
  for n in range (1,x,2):
    for m in range (2,x,2):
      if(a[n]>a[m]):
       a[n],a[m]=a[m],a[n]
  print(a)
 
while r>0:
  nones()
  pares()
  r=r-1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Python - Metodo de ordenamiento Impar-Par

Publicado por joel (901 intervenciones) el 03/06/2020 20:08:32
Hola Jose Alberto, creo que lo tienes mal el código, ya que en los bucles, por cada numero, recorres todos los otros... yo creo que tendria que ser así:

1
2
3
4
5
def nones():
  for n in range (0,x,2):
    if n<len(a)-1 and a[n]>a[n+1]:
        a[n],a[n+1]=a[n+1],a[n]
  print(a)


Aquí he hecho el código entero que funciona correctamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
a=[5,9,7,1,5,2,8,4]
 
def sortParImpar(start):
    """
    start determina si es par o impar
        0 pares
        1 impares
    """
    result=False
    for n in range (start,len(a),2):
        if n<len(a)-1 and a[n]>a[n+1]:
            a[n],a[n+1]=a[n+1],a[n]
            result=True
    return result
 
print(a)
ciclos=0
while True:
    ciclos+=1
    if sortParImpar(0)==False and sortParImpar(1)==False:
        break
print(a)
print("Se ha ordenado en {} ciclos".format(ciclos))

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar