Enunciado
El método consiste en buscar la posición en donde se halla el máximo de un subvector y luego intercambiar el elemento que se halla en la primera posición del subvector con el elemento que se halla en la posición del máximo. Este proceso se repite con el elemento de la segunda posición, de la tercera, etc. Para ello se realizan n – 1 recorridas del vector, en cada una de las cuales la cantidad de elementos a comparar es en una unidad menor. En el primer paso se recorre el vector del primero al último elemento, buscando la posición del máximo elemento del vector completo.
Video: Ordenamiento por Selección
Código
Python
def Selection ( v ):
n = len( v )
for i in range ( n-1 ):
m = i
for j in range ( i+1, n ):
if ( v[ j ] > v[ m ] ): m = j
aux = v[ i ] ; v [ i ] = v[ m ] ; v[ m ] = aux
def main():
lista = [ 12, 18, 3, 22, 15, 48, 12 ]
Selection( lista )
print( lista )
input( "\nPresionar/Press Enter to exit " )
main()
C++
#include <iostream>
#include <iomanip>
using namespace std ;
#include <conio.h>
void Selection ( int n , float v[ ] )
{
int i, j, m ;
float aux ;
for ( i = 0 ; i < n-1 ; i++ )
{
m = i ;
for ( j = i+1 ; j < n ; j++ )
if ( v[ j ] > v[ m ] ) m = j ;
aux = v[ i ] ;
v[ i ] = v[ m ] ;
v[ m ] = aux ;
}
}
int main()
{
int i ;
float v1[ 10 ] ;
cout << "Ingresar 5 numeros/" ;
cout << "Enter 5 numbers: " << endl ;
for ( i = 0 ; i < 5 ; i++ )
cin >> v1[ i ] ;
Selection( 5 , v1 ) ;
cout << "Vector ordenado/" ;
cout << "Ordered vector" << endl ;
for ( i = 0 ; i < 5 ; i++ )
cout << setw(8) << v1[ i ] << endl ;
cout << endl ;
cout << "Presionar/Press Enter to exit " ;
getch() ;
return 0 ;
}
Pascal
Program ProblemaEj05 ;
uses CRT ;
const
n= 5 ;
type
rango= 0..20 ;
vectorReal= array [ rango ] of real ;
var
v1: vectorReal ;
i: rango ;
Procedure Selection( n: rango; var v: vectorReal ) ;
var i, j, m: rango ;
aux: real ;
begin
for i := 1 to n-1 do
begin
m := i ;
for j := i+1 to n do
if v[ j ] > v[ m ] then m := j ;
aux := v[ i ] ;
v[ i ] := v[ m ] ;
v[ m ] := aux ;
end
end ;
begin
ClrScr ;
write( 'Ingresar 5 numeros/' ) ;
writeln( 'Enter 5 numbers: ' ) ;
for i:=1 to n do
begin
readln( v1[ i ] ) ;
end ;
writeln ;
Selection( n , v1 ) ;
write( 'Vector ordenado/' ) ;
writeln( 'Ordered vector' ) ;
for i:=1 to n do
writeln( v1[ i ]:8:2 ) ;
writeln ;
writeln( 'Presionar/Press Enter to exit ' ) ;
readln ;
end.
Diagramas


