Saltar para o conteúdo

Selection sort: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
bot: revertidas edições de 189.59.149.71 ( modificação suspeita : -14), para a edição 19217056 de Leonardo.stabile
Linha 53: Linha 53:
}
}
</source>
</source>

Para visualizar esquematização 3D, copie e cole o seguinte link no navegador:
* www.own3d.es


=== Código em [[C#]] ===
=== Código em [[C#]] ===

Revisão das 19h48min de 25 de maio de 2010

Animação do algoritmo selection sort.

O selection sort (do inglês, ordenação por seleção) é um algoritmo de ordenação baseado em se passar sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posição, e assim é feito sucessivamente com os (n-1) elementos restantes, até os últimos dois elementos.

Complexidade

O algoritmo possui complexidade enquanto que, por exemplo, os algoritmos Heapsort e Mergesort possuem complexidades .

Implementações

Código em C

void selection_sort(int num[], int tam) { 
  int i, j, min;
  for (i = 0; i < (tam-1); i++) {
    min = i;
    for (j = (i+1); j < tam; j++) {
      if(num[j] < num[min]) {
        min = j;
      }
    }
    if (i != min) {
      int swap = num[i];
      num[i] = num[min];
      num[min] = swap;
    }
  }
}
Código da ordenação SelectionSort com strings
void ordenar_selecao_nome() {
    int j;
    for(i=0; i<n-1; i++) {
        for(j=i+1; j<n; j++) {
            if(strcmpi(vetor[i], vetor[j])>0) {
            strcpy(aux_char, vetor[i]);
            strcpy(vetor[i], vetor[j]);
            strcpy(vetor[j], aux_char);
        }
    }
}

Código em C++

template<class T>
void selection_sort( std::vector<T> &lista )
{
  for( std::vector<T>::iterator it = lista.begin(); it != lista.end()-1; ++it )
  {
    std::iter_swap( it, std::min_element( it, lista.end() ) );
  }
}

Para visualizar esquematização 3D, copie e cole o seguinte link no navegador:

  • www.own3d.es

Código em C#

public int[] ordernar(int[] vetor)
{
    int aux = 0;
    for (int i = 0; i < vetor.Length - 1; i++)
    {
        for (int j = i + 1; j < vetor.Length; j++)
        {
            if (vetor[j] < vetor[i])
            {
                aux = vetor[j];
                vetor[j] = vetor[i];
                vetor[i] = aux;
            }
        }
    }
    return vetor;
}

Código em Pascal

Program selectionsort(input,output);

Var
   i,tam,a,tmp,n	: integer;
   v	  	: array[1..50] of integer;
   trocou 	: boolean;

Begin
   tam:=n-1;
   a:=1;
   trocou:=true;
   while (trocou) and (a<=n-1) do
   Begin
      trocou:=false;
      for i:=1 to tam do
	 if v[i]>v[i+1] then
	 Begin
	 tmp:=v[i];
	 v[i]:=v[i+1];
	 v[i+1]:=tmp;
	 trocou:=true;
	 End;
      tam:=tam-1;
      a:=a+1;
   End;
Readln;
End.

Código em Java

public static void SelectionSort(int[] v) {
   int index_min,
       aux;

   for (int i=0; i<v.length; i++) {
       index_min = i;
       for (int j=i+1; j<v.length; j++) {
          if (v[j]<v[index_min]) {
             index_min=j;
          }
       }
       if(index_min != i){
         aux = v[index_min];
         v[index_min] = v[i];
         v[i] = aux;
       }
	 
   }
}

Código em Visual Basic

Public Function SelectionSort(Vetor(), tam)

Dim i, j
Dim min, aux

For i = 0 To tam
    min = i
    For j = i + 1 To tam
        If Vetor(j) < Vetor(min) Then min = j
    Next j
    
    aux = Vetor(i)
    Vetor(i) = Vetor(min)
    Vetor(min) = aux
Next i

End Function

Código em Python

def selectsort (L):
	n=len(L)
	for i in range(n-1):
		mini = i

		for j in range(i+1,n):
			if(L[j]<L[mini]):
				mini=j

		L[i],L[mini]=L[mini],L[i]


Código em PHP

function selection_sort(&$array) {
	$len = count($array) -1;
	for($i=0; $i<=$len ; $i++) {
		$ini = $i;
		for($j=$i+1; $j<=$len; $j++) {
			if ($array[$j] < $array[$i]) {
				$ini = $j;
			}
		}
		if ($ini != $i) {
			$troca = $array[$i];
			$array[$i] = $array[$ini];
			$array[$ini] = $troca;
		}
	}
}

Ver também