Ordenamiento – Selección

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