Suche…


Auswahl sortieren Basisinformationen

Auswahlsortierung ist ein Sortieralgorithmus, insbesondere eine Direktvergleichssortierung. Es hat eine O (n2) -Zeitkomplexität, was es bei großen Listen ineffizient macht und im Allgemeinen schlechter abschneidet als die ähnliche Sortierreihenfolge. Die Auswahl der Auswahl ist für ihre Einfachheit bekannt und hat in bestimmten Situationen, insbesondere wenn der Hilfsspeicher begrenzt ist, Leistungsvorteile gegenüber komplizierteren Algorithmen.

Der Algorithmus teilt die Eingabeliste in zwei Teile auf: die Unterliste der bereits sortierten Elemente, die von links nach rechts am Anfang (links) der Liste aufgebaut ist, und die Unterliste der noch zu sortierenden Elemente, die den Rest der Liste belegen Liste. Anfangs ist die sortierte Unterliste leer und die unsortierte Unterliste ist die gesamte Eingabeliste. Der Algorithmus fährt damit fort, das kleinste (oder je nach Sortierreihenfolge größte) Element in der unsortierten Unterliste zu finden, es mit dem ganz linken unsortierten Element auszutauschen (zu sortieren) und die Unterlistengrenzen um ein Element nach rechts zu verschieben .

Pseudocode für Auswahl sortieren:

function select(list[1..n], k)
 for i from 1 to k
     minIndex = i
     minValue = list[i]
     for j from i+1 to n
         if list[j] < minValue
             minIndex = j
             minValue = list[j]
     swap list[i] and list[minIndex]
 return list[k]

Visualisierung der Auswahlart:

Auswahl sortieren Animation

Beispiel für die Auswahl der Sortierung:

Beispiel für die Sortierungsauswahl

Hilfsraum: O(n)
Zeitkomplexität: O(n^2)

Implementierung der Auswahlsortierung in C #

Ich habe die C # -Sprache verwendet, um den Selection-Sortieralgorithmus zu implementieren.

public class SelectionSort
{
    private static void SortSelection(int[] input, int n)
    {
        for (int i = 0; i < n - 1; i++)
        {
            var minId = i;
            int j;
            for (j = i + 1; j < n; j++)
            {
                if (input[j] < input[minId]) minId = j;
            }
            var temp = input[minId];
            input[minId] = input[i];
            input[i] = temp;
        }
    }

    public static int[] Main(int[] input)
    {
        SortSelection(input, input.Length);
        return input;
    }
}

Elixier-Implementierung

defmodule Selection do

  def sort(list) when is_list(list) do
    do_selection(list, [])
  end

  def do_selection([head|[]], acc) do
    acc ++ [head]
  end

  def do_selection(list, acc) do
    min = min(list)
    do_selection(:lists.delete(min, list), acc ++ [min])
  end

  defp min([first|[second|[]]]) do
    smaller(first, second)
  end

  defp min([first|[second|tail]]) do
    min([smaller(first, second)|tail])
  end

  defp smaller(e1, e2) do
    if e1 <= e2 do
      e1
    else
      e2
    end
  end
end

Selection.sort([100,4,10,6,9,3])
|> IO.inspect


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow