Ayuda en algoritmo de mezcla y orden ascendente de matriz

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Ayuda en algoritmo de mezcla y orden ascendente de matriz

Mensaje por arkcrew »

Buenas,

En primer lugar, se que ya está hecho con las funciones de array short, pero lo que tengo que hacer es una función que se le pasen dos arrays ordenados previamente de menor a mayor y que esta función los mezcle y devuelva ordenados de menor a mayor.

Se que es facil pero me estoy liando, tengo esto:

Código: Seleccionar todo

#include <Array.au3>


Local $x1[3] = [1, 2, 5]
Local $y1[5] = [0, 3, 4, 6, 15]

$array = ordenar($x1, $y1)
_ArrayDisplay($array)

Func ordenar($x, $y)
	$pos = 0;
	$pOrdenado = 0;
	Local $ordenado[UBound($x) + UBound($y)]

	For $a = 0 To UBound($x) - 1
		If ($x[$a] < $y[$pos]) Then
			$ordenado[$pOrdenado] = $x[$a]
			If (($a + 1) <= UBound($x)-1) Then
				If $y[$pos] < $x[$a + 1] Then
					$pOrdenado += 1
					$ordenado[$pOrdenado] = $y[$pos]
				Else
					$pOrdenado += 1
					$ordenado[$pOrdenado] = $x[$a+1]
					if ($y[$pos]<$x[$a + 1]) Then
						$pOrdenado += 1
						$ordenado[$pOrdenado] = $y[$pos]
					EndIf
				EndIf
			Else
				$pOrdenado += 1
				$ordenado[$pOrdenado] = $y[$pos]
			EndIf
		Else
			$ordenado[$pOrdenado] = $y[$pos]
			If ($x[$a] < $y[$pos + 1]) Then
				$pOrdenado += 1
				$ordenado[$pOrdenado] = $x[$a]
			EndIf
		EndIf
		$pos += 1
		$pOrdenado += 1
	Next

	If (UBound($x) < UBound($y)) Then
		For $a = $pos To UBound($y) - 1
			$ordenado[$pOrdenado] = $y[$a]
			$pOrdenado += 1
		Next
	EndIf

	Return $ordenado
EndFunc   ;==>ordenar
Pero me da algunos fallos y no doy con la clave.

Echadme un cable porfa!!

Saludos!
Avatar de Usuario
arkcrew
Profesional del Autoit
Mensajes: 506
Registrado: 28 Sep 2009, 19:17
Ubicación: Granada, España
Contactar:

Re: Ayuda en algoritmo de mezcla y orden ascendente de matri

Mensaje por arkcrew »

Buenas,

Nada, era una ida de olla mía, esto es el código funcional

Código: Seleccionar todo

Func ordenarNuevo($v, $b)
	$xpos = 0
	$ypos = 0
	$total = UBound($v) + UBound($b)
	$n = UBound($v)
	$m = UBound($b)
	Local $z[$total]
	For $i = 0 To $total - 1
		If ($xpos < $n Or $ypos == $m) Then
			If $v[$xpos] <= $b[$ypos] Then
				$z[$i] = $v[$xpos];
				$xpos = $xpos + 1;
			Else
				$z[$i] = $b[$ypos];
				$ypos = $ypos + 1;
			EndIf
		Else
			If ($ypos < $m Or $xpos = $n) Then
				$z[$i] = $b[$ypos];
				$ypos = $ypos + 1;
			EndIf
		EndIf

	Next
	Return $z
EndFunc   ;==>ordenarNuevo
Saludos!
Responder