Enunciado
Dados dos vectores ordenados en el mismo sentido, el proceso de intercalación consiste en obtener un vector igualmente ordenado, que contenga a todos los elementos de los vectores de entrada.
Código
Python
def Merge( a , b):
c = []
i = j = 0
while i<len( a ) and j<len( b ):
if a[i]<b[j]:
c.append( a[i] )
i += 1
else:
c.append( b[j] )
j += 1
if i==len( a ):
for p in range ( j , len( b ) ):
c.append( b[p] )
else:
for p in range ( i , len( a ) ):
c.append( a[p] )
return c
def main():
l1 = [ 3, 12, 25, 36, 39 ]
l2 = [ 2, 23, 27, 30 ]
l3 = Merge( l1 , l2 )
print( "\nListas intercaladas/Merged lists" )
for i in l3:
print( i )
input( "Presionar/Press Enter to exit " )
main()
C++
#include <iostream>
using namespace std ;
#include <conio.h>
void Merge ( float a[ ] , float b[ ] ,
int n , int m , float c[ ] )
{
int i , j , k , p ;
i = 0 ; j = 0 ; k = 0 ;
while ( i < n && j < m )
{
if ( a[i] <= b[j] )
{ c [k] = a[i] ; i++ ; }
else
{ c[k] = b[j] ; j++ ; }
k++ ;
}
if ( i == n )
for ( p = j ; p < m ; p++ )
{ c[k] = b[p] ; k++ ; }
else
for ( p = i ; p < n ; p++ )
{ c[k] = a[p] ; k++ ; }
}
int main()
{
int i ;
float v1[ 10 ] , v2[ 10 ] , v3[ 10 ] ;
cout << "Vector 1 - 5 elementos/elements"
<< endl ;
for ( i = 0 ; i < 5 ; i++ )
cin >> v1[i] ;
cout << "Vector 2 - 4 elementos/elements"
<< endl ;
for ( i = 0 ; i < 4 ; i++ )
cin >> v2[i] ;
Merge( v1 , v2 , 5 , 4 , v3 ) ;
cout << "Vector intercalado/merged" << endl ;
for ( i = 0 ; i < 5 + 4 ; i++ )
cout << v3[i] ) ;
cout << endl ;
cout << "Presionar/Press Enter to exit " ;
getch() ;
return 0 ;
}
Pascal
program EjemploIntercalar ;
uses crt;
type
rango= 1..20 ;
v_int= array [ rango ] of integer ;
var
v1 , v2 , v3: v_int ;
cant3, i: rango ;
Procedure Merge( n , m: rango ; var a , b: v_int ;
var c: v_int ) ;
var
i , j , k , p : rango ;
begin
i := 1 ; j := 1 ; k := 1 ;
while ( i <= n ) and ( j <= m ) do
begin
if a[ i ] <= b[ j ]
then
begin
c[ k ] := a[ i ] ;
i := i + 1
end
else
begin
c[ k ] := b[ j ] ;
j := j + 1
end ;
k := k + 1
end ;
if i > n
then
for p := j to m do
begin
c[ k ] := b[ p ] ;
k := k + 1
end
else
for p := i to n do
begin
c[ k ] := a[ p ] ;
k := k + 1
end
end ;
begin
ClrScr;
write( 'Vectores ordenados ascendente/' ) ;
writeln( 'Vectors sorted ascending' ) ;
writeln ;
writeln( 'Vector 1 - 5 elementos/elements: ' ) ;
for i:=1 to 5 do
begin
readln( v1[ i ] ) ;
end;
writeln( 'Vector 2 - 4 elementos/elements: ' ) ;
for i:=1 to 4 do
begin
readln( v2[ i ] ) ;
end;
writeln( 'Vector intercalado/merged' ) ;
Merge( 5 , 4 , v1 , v2 , v3 ) ;
writeln ;
for i:=1 to 5 + 4 do
begin
writeln( v3[ i ]:14 ) ;
writeln ;
end;
writeln( 'Presionar/Press Enter to exit ' ) ;
readln ;
end.
Diagramas


