fbpx
Wikipedia

Ordenamiento por selección

El ordenamiento por selección (Selection Sort en inglés) es un algoritmo de ordenamiento que requiere O operaciones para ordenar una lista de n elementos.

Animación del Selection Sort

Descripción del algoritmo

Su funcionamiento es el siguiente:

  • Buscar el mínimo elemento de la lista
  • Intercambiarlo con el primero
  • Buscar el siguiente mínimo en el resto de la lista
  • Intercambiarlo con el segundo

Y en general:

  • Buscar el mínimo elemento entre una posición i y el final de la lista
  • Intercambiar el mínimo con el elemento de la posición i

De esta manera se puede escribir el siguiente pseudocódigo para ordenar una lista de n elementos indexados desde el 0:

para i=0 hasta n-2 mínimo = i; para j=i+1 hasta n-1 si lista[j] < lista[mínimo] entonces mínimo = j /* (!) */ fin si fin para intercambiar(lista[i], lista[mínimo]) fin para 


Ejemplo del algoritmo en C++

for(int i = 0; i < n-1 ; i++){  int minimo = i;  for(int j = i + 1 ; j < n ; j++){  if(lista[j] < lista[minimo]){  minimo = j;  }  }  intercambiar(lista , i , minimo); } 

Este algoritmo mejora ligeramente el algoritmo de la burbuja. En el caso de tener que ordenar un vector de enteros, esta mejora no es muy sustancial, pero cuando hay que ordenar un vector de estructuras más complejas, la operación intercambiar() sería más costosa en este caso. Este algoritmo realiza muchas menos operaciones intercambiar() que el de la burbuja, por lo que lo mejora en algo. Si la línea comentada con (!) se sustituyera por intercambiar(lista[i], lista[j]) tendríamos una versión del algoritmo de la burbuja (naturalmente eliminando el orden intercambiar del final).

Otra desventaja de este algoritmo respecto a otros como el de burbuja o de inserción directa es que no mejora su rendimiento cuando los datos ya están ordenados o parcialmente ordenados. Así como, por ejemplo, en el caso de la ordenación de burbuja se requeriría una única pasada para detectar que el vector ya está ordenado y finalizar, en la ordenación por selección se realizarían el mismo número de pasadas independientemente de si los datos están ordenados o no.

Rendimiento del algoritmo

Al algoritmo de ordenamiento por selección, para ordenar un vector de n términos, tiene que realizar siempre el mismo número de comparaciones:

 

Esto es, el número de comparaciones c(n) no depende del orden de los términos, sino del número de términos.

 

Por lo tanto la cota ajustada asintótica del número de comparaciones pertenece al orden de n cuadrado.

El número de intercambios i(n), también es fijo, téngase en cuenta que la instrucción:

intercambiar(lista[i], lista[mínimo])

siempre se ejecuta, aun cuando i= mínimo, lo que da lugar:

 

sea cual sea el vector, y el orden de sus términos, lo que implica en todos los casos un coste lineal:

 

la cota ajustada asintótica del número de intercambios es lineal, del orden de n.

Asimismo, la fórmula que representa el rendimiento del algoritmo, viene dada por la función:

 

Ejemplo

C++

#include<iostream> void seleccion(int longitud,int* array); void imprimir(int longitud,int* array); int main() {  int longi;  std::cin>> longi;  int* array = new int [longi];  for (int i = 0; i < longi; i++)  {  std::cin>>array[i];  }      seleccion(longi, array);    delete[] array;  return 0; } void seleccion(int longitud, int* array){  int menor;  int aux;  for (int i = 0; i < longitud - 1; i++)   {  menor = i;  for (int j = i + 1; j < longitud; j++)  {  if (array[j] < array[menor])  {  menor = j;  }  }  aux = array[i];  array[i] = array[menor];  array[menor] = aux;    std::cout<<std::endl;  imprimir(longitud, array);  } } void imprimir(int longitud,int* array){  for (int k = 0; k < longitud; k++)  {  std::cout<< array[k]<<" ";  } } 

Véase también

Enlaces externos

  • Distintas implementaciones del algoritmo en Wikibooks (inglés)
  • Distintas implementaciones del algoritmo en RosettaCode.org (inglés)
  •   Datos: Q220831
  •   Multimedia: Selection sort

ordenamiento, selección, ordenamiento, selección, selection, sort, inglés, algoritmo, ordenamiento, requiere, displaystyle, operaciones, para, ordenar, lista, elementos, animación, selection, sort, Índice, descripción, algoritmo, rendimiento, algoritmo, ejempl. El ordenamiento por seleccion Selection Sort en ingles es un algoritmo de ordenamiento que requiere O n 2 displaystyle n 2 operaciones para ordenar una lista de n elementos Animacion del Selection Sort Indice 1 Descripcion del algoritmo 2 Rendimiento del algoritmo 3 Ejemplo 3 1 C 4 Vease tambien 5 Enlaces externosDescripcion del algoritmo EditarSu funcionamiento es el siguiente Buscar el minimo elemento de la lista Intercambiarlo con el primero Buscar el siguiente minimo en el resto de la lista Intercambiarlo con el segundoY en general Buscar el minimo elemento entre una posicion i y el final de la lista Intercambiar el minimo con el elemento de la posicion iDe esta manera se puede escribir el siguiente pseudocodigo para ordenar una lista de n elementos indexados desde el 0 para i 0 hasta n 2 minimo i para j i 1 hasta n 1 si lista j lt lista minimo entonces minimo j fin si fin para intercambiar lista i lista minimo fin para Ejemplo del algoritmo en C for int i 0 i lt n 1 i int minimo i for int j i 1 j lt n j if lista j lt lista minimo minimo j intercambiar lista i minimo Este algoritmo mejora ligeramente el algoritmo de la burbuja En el caso de tener que ordenar un vector de enteros esta mejora no es muy sustancial pero cuando hay que ordenar un vector de estructuras mas complejas la operacion intercambiar seria mas costosa en este caso Este algoritmo realiza muchas menos operaciones intercambiar que el de la burbuja por lo que lo mejora en algo Si la linea comentada con se sustituyera por intercambiar lista i lista j tendriamos una version del algoritmo de la burbuja naturalmente eliminando el orden intercambiar del final Otra desventaja de este algoritmo respecto a otros como el de burbuja o de insercion directa es que no mejora su rendimiento cuando los datos ya estan ordenados o parcialmente ordenados Asi como por ejemplo en el caso de la ordenacion de burbuja se requeriria una unica pasada para detectar que el vector ya esta ordenado y finalizar en la ordenacion por seleccion se realizarian el mismo numero de pasadas independientemente de si los datos estan ordenados o no Rendimiento del algoritmo EditarArticulo principal Cota ajustada asintotica Al algoritmo de ordenamiento por seleccion para ordenar un vector de n terminos tiene que realizar siempre el mismo numero de comparaciones c n n 2 n 2 displaystyle c n cfrac n 2 n 2 Esto es el numero de comparaciones c n no depende del orden de los terminos sino del numero de terminos 8 c n n 2 displaystyle Theta c n n 2 Por lo tanto la cota ajustada asintotica del numero de comparaciones pertenece al orden de n cuadrado El numero de intercambios i n tambien es fijo tengase en cuenta que la instruccion intercambiar lista i lista minimo siempre se ejecuta aun cuando i minimo lo que da lugar i n n displaystyle i n n sea cual sea el vector y el orden de sus terminos lo que implica en todos los casos un coste lineal 8 i n n displaystyle Theta i n n la cota ajustada asintotica del numero de intercambios es lineal del orden de n Asimismo la formula que representa el rendimiento del algoritmo viene dada por la funcion c n n 2 n 2 displaystyle c n cfrac n 2 n 2 Ejemplo EditarC Editar include lt iostream gt void seleccion int longitud int array void imprimir int longitud int array int main int longi std cin gt gt longi int array new int longi for int i 0 i lt longi i std cin gt gt array i seleccion longi array delete array return 0 void seleccion int longitud int array int menor int aux for int i 0 i lt longitud 1 i menor i for int j i 1 j lt longitud j if array j lt array menor menor j aux array i array i array menor array menor aux std cout lt lt std endl imprimir longitud array void imprimir int longitud int array for int k 0 k lt longitud k std cout lt lt array k lt lt Vease tambien EditarAlgoritmo de ordenamientoEnlaces externos EditarDistintas implementaciones del algoritmo en Wikibooks ingles Distintas implementaciones del algoritmo en RosettaCode org ingles Datos Q220831 Multimedia Selection sort Obtenido de https es wikipedia org w index php title Ordenamiento por seleccion amp oldid 142789316, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos