Zoeken…


Cyclus Sorteren Basisinformatie

Cyclus sorteren is een sorteeralgoritme dat gebruikmaakt van vergelijkingssortering die theoretisch optimaal is in termen van het totale aantal schrijfbewerkingen naar de oorspronkelijke array, in tegenstelling tot enig ander intern algoritme. Cyclus sorteren is een onstabiel sorteeralgoritme. Het is gebaseerd op het idee van permutatie waarbij permutaties worden verwerkt in cycli, die afzonderlijk roteren en een gesorteerde uitvoer retourneren.

Voorbeeld van cyclus sorteren:

Cyclus sorteren

Hulpruimte: O(1)
Tijd Complexiteit: O(n^2)

Pseudocode-implementatie

(input)
output = 0
for cycleStart from 0 to length(array) - 2
    item = array[cycleStart]
    pos = cycleStart
    for i from cycleStart + 1 to length(array) - 1
        if array[i] < item:
            pos += 1
    if pos == cycleStart:
        continue
    while item == array[pos]:
        pos += 1
    array[pos], item = item, array[pos]
    writes += 1
    while pos != cycleStart:
        pos = cycleStart
        for i from cycleStart + 1 to length(array) - 1
            if array[i] < item:
                pos += 1
        while item == array[pos]:
            pos += 1
        array[pos], item = item, array[pos]
        writes += 1
return outout

C # Implementatie

public class CycleSort
{
    public static void SortCycle(int[] input)
    {
        for (var i = 0; i < input.Length; i++)
        {
            var item = input[i];
            var position = i;
            do
            {
                var k = input.Where((t, j) => position != j && t < item).Count();
                if (position == k) continue;
                while (position != k && item == input[k])
                {
                    k++;
                }
                var temp = input[k];
                input[k] = item;
                item = temp;
                position = k;
            } while (position != i);
        }
    }

    public static int[] Main(int[] input)
    {
        SortCycle(input);
        return input;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow