diff --git a/inf3.csproj b/inf3.csproj index a2bda9d..4566a5c 100644 --- a/inf3.csproj +++ b/inf3.csproj @@ -102,6 +102,7 @@ + diff --git a/src/Quicksort.cs b/src/Quicksort.cs new file mode 100644 index 0000000..9ebdb59 --- /dev/null +++ b/src/Quicksort.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; + +namespace WorldOfPeacecraft +{ + public class Quicksort + { + public static void sort (IList list, Func isSmaller) + { + if (list.Count != 0) { + sort (list, 0, list.Count - 1, isSmaller); + } + } + + private static void sort (IList list, int startIndex, int endIndex, Func isSmaller) + { + T tmp; + if (endIndex - startIndex <= 0) { + return; + } + int pivot = endIndex; + int rechts = endIndex - 1; + int links = startIndex; + while (links < rechts) { + while (isSmaller(list[links], list[pivot]) && links < rechts) { + links++; + } + while (isSmaller(list[pivot], list[rechts]) && rechts > links) { + rechts--; + } + if (isSmaller (list [rechts], list [links]) && links < rechts) { + tmp = list [links]; + list [links] = list [rechts]; + list [rechts] = tmp; + links++; + } + } + if (isSmaller (list [links], list [pivot])) { + links++; + } + tmp = list[links]; + list[links] = list[pivot]; + list[pivot] = tmp; + pivot = links; + sort (list, startIndex, pivot - 1, isSmaller); + sort (list, pivot + 1, endIndex, isSmaller); + } + } +} \ No newline at end of file