From f4531c7eea8f6ea3d1ca233e51bbb21829a07c74 Mon Sep 17 00:00:00 2001 From: Daniel Schemp Date: Sat, 20 Oct 2018 23:28:42 +0200 Subject: [PATCH] added gnome sort --- Tests/Tests.csproj | 9 ++--- Tests/sort/GnomeSortTest.cs | 54 ++++++++++++++++++++++++++++ csharp-algorithms.sln | 7 ++++ gnomesort/GnomeSort.cs | 43 ++++++++++++++++++++++ gnomesort/Properties/AssemblyInfo.cs | 36 +++++++++++++++++++ gnomesort/gnomesort.csproj | 54 ++++++++++++++++++++++++++++ 6 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 Tests/sort/GnomeSortTest.cs create mode 100644 gnomesort/GnomeSort.cs create mode 100644 gnomesort/Properties/AssemblyInfo.cs create mode 100644 gnomesort/gnomesort.csproj diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index e551d4db..34cb23ec 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -48,7 +48,6 @@ ..\linearsearch\bin\Debug\linearsearch.dll - ..\packages\MSTest.TestFramework.1.3.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll @@ -63,6 +62,7 @@ + @@ -102,6 +102,10 @@ {92DB864E-DF8A-470C-9746-69B7C41AB80C} fibonaccisearch + + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC} + gnomesort + {9199c1cc-0966-40c9-8acc-7ab1baf6512a} quicksort @@ -123,9 +127,6 @@ heapsort - - - diff --git a/Tests/sort/GnomeSortTest.cs b/Tests/sort/GnomeSortTest.cs new file mode 100644 index 00000000..41e887b6 --- /dev/null +++ b/Tests/sort/GnomeSortTest.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using System.Linq; +using csharp_algorithms; +using gnomesort; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Tests.sort +{ + [TestClass] + public class GnomeSortTest + { + [TestMethod] + public void NormalSort() + { + // Arrange + var list = new List + { + new Node(5), + new Node(1) + }; + var b = new GnomeSort(list); + + // Act + List result = b.Sort().ToList(); + + // Assert + Assert.AreEqual(1, result.ElementAt(0).Number); + Assert.AreEqual(5, result.ElementAt(1).Number); + } + + [TestMethod] + public void LongerSort() + { + // Arrange + var list = new List + { + new Node(3), + new Node(5), + new Node(1), + new Node(8) + }; + var b = new GnomeSort(list); + + // Act + var result = b.Sort().ToList(); + + // Assert + Assert.AreEqual(1, result.ElementAt(0).Number); + Assert.AreEqual(3, result.ElementAt(1).Number); + Assert.AreEqual(5, result.ElementAt(2).Number); + Assert.AreEqual(8, result.ElementAt(3).Number); + } + } +} \ No newline at end of file diff --git a/csharp-algorithms.sln b/csharp-algorithms.sln index 34e32858..711b401f 100644 --- a/csharp-algorithms.sln +++ b/csharp-algorithms.sln @@ -33,6 +33,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "knapsackproblem", "knapsack EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bellmanFordAlgorithm", "bellmanFordAlgorithm\bellmanFordAlgorithm.csproj", "{6B79C9EC-0219-44AD-B399-CD4046718E66}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gnomesort", "gnomesort\gnomesort.csproj", "{1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -87,6 +89,10 @@ Global {6B79C9EC-0219-44AD-B399-CD4046718E66}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B79C9EC-0219-44AD-B399-CD4046718E66}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B79C9EC-0219-44AD-B399-CD4046718E66}.Release|Any CPU.Build.0 = Release|Any CPU + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -102,6 +108,7 @@ Global {8087DFD2-673A-499F-B130-0FAE0F31EADC} = {05BBB622-53C5-4866-869B-B45978502CB5} {8870FC35-4386-43E5-B5EA-1C764E7ADC54} = {05BBB622-53C5-4866-869B-B45978502CB5} {6B79C9EC-0219-44AD-B399-CD4046718E66} = {05BBB622-53C5-4866-869B-B45978502CB5} + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC} = {6A9C8607-AA57-4817-B2C8-B8DD5065AC7C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7F2BFC66-A9D6-4C6D-A15A-984F23C11D29} diff --git a/gnomesort/GnomeSort.cs b/gnomesort/GnomeSort.cs new file mode 100644 index 00000000..6cad8cd0 --- /dev/null +++ b/gnomesort/GnomeSort.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using csharp_algorithms; + +namespace gnomesort +{ + public class GnomeSort + { + private readonly IEnumerable _list; + + public GnomeSort(IEnumerable list) + { + _list = list; + } + + private void Swap(Node left, Node right) + { + int originalLeft = left.Number; + left.Number = right.Number; + right.Number = originalLeft; + } + + public IEnumerable Sort() + { + var i = 0; + while (i < _list.Count()) + if (i == 0 || _list.ElementAt(i).Number > _list.ElementAt(i - 1).Number) + { + i++; + } + else + { + Swap(_list.ElementAt(i), _list.ElementAt(i - 1)); + i--; + } + + return _list; + } + } +} diff --git a/gnomesort/Properties/AssemblyInfo.cs b/gnomesort/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5b7ab09d --- /dev/null +++ b/gnomesort/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("gnomesort")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("gnomesort")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("1593d8d2-1c16-4204-bcf3-fb79e1ce5abc")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/gnomesort/gnomesort.csproj b/gnomesort/gnomesort.csproj new file mode 100644 index 00000000..58d913c7 --- /dev/null +++ b/gnomesort/gnomesort.csproj @@ -0,0 +1,54 @@ + + + + + Debug + AnyCPU + {1593D8D2-1C16-4204-BCF3-FB79E1CE5ABC} + Library + Properties + gnomesort + gnomesort + v4.6.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + {3511528e-8696-40b8-85ab-97456347a497} + csharp-algorithms + + + + \ No newline at end of file