Initial commit from 29th of August 2018
This commit is contained in:
		
							
								
								
									
										398
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										398
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,398 @@ | |||||||
|  | ## Ignore Visual Studio temporary files, build results, and | ||||||
|  | ## files generated by popular Visual Studio add-ons. | ||||||
|  | ## | ||||||
|  | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore | ||||||
|  |  | ||||||
|  | # User-specific files | ||||||
|  | *.rsuser | ||||||
|  | *.suo | ||||||
|  | *.user | ||||||
|  | *.userosscache | ||||||
|  | *.sln.docstates | ||||||
|  |  | ||||||
|  | # User-specific files (MonoDevelop/Xamarin Studio) | ||||||
|  | *.userprefs | ||||||
|  |  | ||||||
|  | # Mono auto generated files | ||||||
|  | mono_crash.* | ||||||
|  |  | ||||||
|  | # Build results | ||||||
|  | [Dd]ebug/ | ||||||
|  | [Dd]ebugPublic/ | ||||||
|  | [Rr]elease/ | ||||||
|  | [Rr]eleases/ | ||||||
|  | x64/ | ||||||
|  | x86/ | ||||||
|  | [Ww][Ii][Nn]32/ | ||||||
|  | [Aa][Rr][Mm]/ | ||||||
|  | [Aa][Rr][Mm]64/ | ||||||
|  | bld/ | ||||||
|  | [Bb]in/ | ||||||
|  | [Oo]bj/ | ||||||
|  | [Ll]og/ | ||||||
|  | [Ll]ogs/ | ||||||
|  |  | ||||||
|  | # Visual Studio 2015/2017 cache/options directory | ||||||
|  | .vs/ | ||||||
|  | # Uncomment if you have tasks that create the project's static files in wwwroot | ||||||
|  | #wwwroot/ | ||||||
|  |  | ||||||
|  | # Visual Studio 2017 auto generated files | ||||||
|  | Generated\ Files/ | ||||||
|  |  | ||||||
|  | # MSTest test Results | ||||||
|  | [Tt]est[Rr]esult*/ | ||||||
|  | [Bb]uild[Ll]og.* | ||||||
|  |  | ||||||
|  | # NUnit | ||||||
|  | *.VisualState.xml | ||||||
|  | TestResult.xml | ||||||
|  | nunit-*.xml | ||||||
|  |  | ||||||
|  | # Build Results of an ATL Project | ||||||
|  | [Dd]ebugPS/ | ||||||
|  | [Rr]eleasePS/ | ||||||
|  | dlldata.c | ||||||
|  |  | ||||||
|  | # Benchmark Results | ||||||
|  | BenchmarkDotNet.Artifacts/ | ||||||
|  |  | ||||||
|  | # .NET Core | ||||||
|  | project.lock.json | ||||||
|  | project.fragment.lock.json | ||||||
|  | artifacts/ | ||||||
|  |  | ||||||
|  | # ASP.NET Scaffolding | ||||||
|  | ScaffoldingReadMe.txt | ||||||
|  |  | ||||||
|  | # StyleCop | ||||||
|  | StyleCopReport.xml | ||||||
|  |  | ||||||
|  | # Files built by Visual Studio | ||||||
|  | *_i.c | ||||||
|  | *_p.c | ||||||
|  | *_h.h | ||||||
|  | *.ilk | ||||||
|  | *.meta | ||||||
|  | *.obj | ||||||
|  | *.iobj | ||||||
|  | *.pch | ||||||
|  | *.pdb | ||||||
|  | *.ipdb | ||||||
|  | *.pgc | ||||||
|  | *.pgd | ||||||
|  | *.rsp | ||||||
|  | *.sbr | ||||||
|  | *.tlb | ||||||
|  | *.tli | ||||||
|  | *.tlh | ||||||
|  | *.tmp | ||||||
|  | *.tmp_proj | ||||||
|  | *_wpftmp.csproj | ||||||
|  | *.log | ||||||
|  | *.tlog | ||||||
|  | *.vspscc | ||||||
|  | *.vssscc | ||||||
|  | .builds | ||||||
|  | *.pidb | ||||||
|  | *.svclog | ||||||
|  | *.scc | ||||||
|  |  | ||||||
|  | # Chutzpah Test files | ||||||
|  | _Chutzpah* | ||||||
|  |  | ||||||
|  | # Visual C++ cache files | ||||||
|  | ipch/ | ||||||
|  | *.aps | ||||||
|  | *.ncb | ||||||
|  | *.opendb | ||||||
|  | *.opensdf | ||||||
|  | *.sdf | ||||||
|  | *.cachefile | ||||||
|  | *.VC.db | ||||||
|  | *.VC.VC.opendb | ||||||
|  |  | ||||||
|  | # Visual Studio profiler | ||||||
|  | *.psess | ||||||
|  | *.vsp | ||||||
|  | *.vspx | ||||||
|  | *.sap | ||||||
|  |  | ||||||
|  | # Visual Studio Trace Files | ||||||
|  | *.e2e | ||||||
|  |  | ||||||
|  | # TFS 2012 Local Workspace | ||||||
|  | $tf/ | ||||||
|  |  | ||||||
|  | # Guidance Automation Toolkit | ||||||
|  | *.gpState | ||||||
|  |  | ||||||
|  | # ReSharper is a .NET coding add-in | ||||||
|  | _ReSharper*/ | ||||||
|  | *.[Rr]e[Ss]harper | ||||||
|  | *.DotSettings.user | ||||||
|  |  | ||||||
|  | # TeamCity is a build add-in | ||||||
|  | _TeamCity* | ||||||
|  |  | ||||||
|  | # DotCover is a Code Coverage Tool | ||||||
|  | *.dotCover | ||||||
|  |  | ||||||
|  | # AxoCover is a Code Coverage Tool | ||||||
|  | .axoCover/* | ||||||
|  | !.axoCover/settings.json | ||||||
|  |  | ||||||
|  | # Coverlet is a free, cross platform Code Coverage Tool | ||||||
|  | coverage*.json | ||||||
|  | coverage*.xml | ||||||
|  | coverage*.info | ||||||
|  |  | ||||||
|  | # Visual Studio code coverage results | ||||||
|  | *.coverage | ||||||
|  | *.coveragexml | ||||||
|  |  | ||||||
|  | # NCrunch | ||||||
|  | _NCrunch_* | ||||||
|  | .*crunch*.local.xml | ||||||
|  | nCrunchTemp_* | ||||||
|  |  | ||||||
|  | # MightyMoose | ||||||
|  | *.mm.* | ||||||
|  | AutoTest.Net/ | ||||||
|  |  | ||||||
|  | # Web workbench (sass) | ||||||
|  | .sass-cache/ | ||||||
|  |  | ||||||
|  | # Installshield output folder | ||||||
|  | [Ee]xpress/ | ||||||
|  |  | ||||||
|  | # DocProject is a documentation generator add-in | ||||||
|  | DocProject/buildhelp/ | ||||||
|  | DocProject/Help/*.HxT | ||||||
|  | DocProject/Help/*.HxC | ||||||
|  | DocProject/Help/*.hhc | ||||||
|  | DocProject/Help/*.hhk | ||||||
|  | DocProject/Help/*.hhp | ||||||
|  | DocProject/Help/Html2 | ||||||
|  | DocProject/Help/html | ||||||
|  |  | ||||||
|  | # Click-Once directory | ||||||
|  | publish/ | ||||||
|  |  | ||||||
|  | # Publish Web Output | ||||||
|  | *.[Pp]ublish.xml | ||||||
|  | *.azurePubxml | ||||||
|  | # Note: Comment the next line if you want to checkin your web deploy settings, | ||||||
|  | # but database connection strings (with potential passwords) will be unencrypted | ||||||
|  | *.pubxml | ||||||
|  | *.publishproj | ||||||
|  |  | ||||||
|  | # Microsoft Azure Web App publish settings. Comment the next line if you want to | ||||||
|  | # checkin your Azure Web App publish settings, but sensitive information contained | ||||||
|  | # in these scripts will be unencrypted | ||||||
|  | PublishScripts/ | ||||||
|  |  | ||||||
|  | # NuGet Packages | ||||||
|  | *.nupkg | ||||||
|  | # NuGet Symbol Packages | ||||||
|  | *.snupkg | ||||||
|  | # The packages folder can be ignored because of Package Restore | ||||||
|  | **/[Pp]ackages/* | ||||||
|  | # except build/, which is used as an MSBuild target. | ||||||
|  | !**/[Pp]ackages/build/ | ||||||
|  | # Uncomment if necessary however generally it will be regenerated when needed | ||||||
|  | #!**/[Pp]ackages/repositories.config | ||||||
|  | # NuGet v3's project.json files produces more ignorable files | ||||||
|  | *.nuget.props | ||||||
|  | *.nuget.targets | ||||||
|  |  | ||||||
|  | # Microsoft Azure Build Output | ||||||
|  | csx/ | ||||||
|  | *.build.csdef | ||||||
|  |  | ||||||
|  | # Microsoft Azure Emulator | ||||||
|  | ecf/ | ||||||
|  | rcf/ | ||||||
|  |  | ||||||
|  | # Windows Store app package directories and files | ||||||
|  | AppPackages/ | ||||||
|  | BundleArtifacts/ | ||||||
|  | Package.StoreAssociation.xml | ||||||
|  | _pkginfo.txt | ||||||
|  | *.appx | ||||||
|  | *.appxbundle | ||||||
|  | *.appxupload | ||||||
|  |  | ||||||
|  | # Visual Studio cache files | ||||||
|  | # files ending in .cache can be ignored | ||||||
|  | *.[Cc]ache | ||||||
|  | # but keep track of directories ending in .cache | ||||||
|  | !?*.[Cc]ache/ | ||||||
|  |  | ||||||
|  | # Others | ||||||
|  | ClientBin/ | ||||||
|  | ~$* | ||||||
|  | *~ | ||||||
|  | *.dbmdl | ||||||
|  | *.dbproj.schemaview | ||||||
|  | *.jfm | ||||||
|  | *.pfx | ||||||
|  | *.publishsettings | ||||||
|  | orleans.codegen.cs | ||||||
|  |  | ||||||
|  | # Including strong name files can present a security risk | ||||||
|  | # (https://github.com/github/gitignore/pull/2483#issue-259490424) | ||||||
|  | #*.snk | ||||||
|  |  | ||||||
|  | # Since there are multiple workflows, uncomment next line to ignore bower_components | ||||||
|  | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | ||||||
|  | #bower_components/ | ||||||
|  |  | ||||||
|  | # RIA/Silverlight projects | ||||||
|  | Generated_Code/ | ||||||
|  |  | ||||||
|  | # Backup & report files from converting an old project file | ||||||
|  | # to a newer Visual Studio version. Backup files are not needed, | ||||||
|  | # because we have git ;-) | ||||||
|  | _UpgradeReport_Files/ | ||||||
|  | Backup*/ | ||||||
|  | UpgradeLog*.XML | ||||||
|  | UpgradeLog*.htm | ||||||
|  | ServiceFabricBackup/ | ||||||
|  | *.rptproj.bak | ||||||
|  |  | ||||||
|  | # SQL Server files | ||||||
|  | *.mdf | ||||||
|  | *.ldf | ||||||
|  | *.ndf | ||||||
|  |  | ||||||
|  | # Business Intelligence projects | ||||||
|  | *.rdl.data | ||||||
|  | *.bim.layout | ||||||
|  | *.bim_*.settings | ||||||
|  | *.rptproj.rsuser | ||||||
|  | *- [Bb]ackup.rdl | ||||||
|  | *- [Bb]ackup ([0-9]).rdl | ||||||
|  | *- [Bb]ackup ([0-9][0-9]).rdl | ||||||
|  |  | ||||||
|  | # Microsoft Fakes | ||||||
|  | FakesAssemblies/ | ||||||
|  |  | ||||||
|  | # GhostDoc plugin setting file | ||||||
|  | *.GhostDoc.xml | ||||||
|  |  | ||||||
|  | # Node.js Tools for Visual Studio | ||||||
|  | .ntvs_analysis.dat | ||||||
|  | node_modules/ | ||||||
|  |  | ||||||
|  | # Visual Studio 6 build log | ||||||
|  | *.plg | ||||||
|  |  | ||||||
|  | # Visual Studio 6 workspace options file | ||||||
|  | *.opt | ||||||
|  |  | ||||||
|  | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | ||||||
|  | *.vbw | ||||||
|  |  | ||||||
|  | # Visual Studio 6 auto-generated project file (contains which files were open etc.) | ||||||
|  | *.vbp | ||||||
|  |  | ||||||
|  | # Visual Studio 6 workspace and project file (working project files containing files to include in project) | ||||||
|  | *.dsw | ||||||
|  | *.dsp | ||||||
|  |  | ||||||
|  | # Visual Studio 6 technical files | ||||||
|  | *.ncb | ||||||
|  | *.aps | ||||||
|  |  | ||||||
|  | # Visual Studio LightSwitch build output | ||||||
|  | **/*.HTMLClient/GeneratedArtifacts | ||||||
|  | **/*.DesktopClient/GeneratedArtifacts | ||||||
|  | **/*.DesktopClient/ModelManifest.xml | ||||||
|  | **/*.Server/GeneratedArtifacts | ||||||
|  | **/*.Server/ModelManifest.xml | ||||||
|  | _Pvt_Extensions | ||||||
|  |  | ||||||
|  | # Paket dependency manager | ||||||
|  | .paket/paket.exe | ||||||
|  | paket-files/ | ||||||
|  |  | ||||||
|  | # FAKE - F# Make | ||||||
|  | .fake/ | ||||||
|  |  | ||||||
|  | # CodeRush personal settings | ||||||
|  | .cr/personal | ||||||
|  |  | ||||||
|  | # Python Tools for Visual Studio (PTVS) | ||||||
|  | __pycache__/ | ||||||
|  | *.pyc | ||||||
|  |  | ||||||
|  | # Cake - Uncomment if you are using it | ||||||
|  | # tools/** | ||||||
|  | # !tools/packages.config | ||||||
|  |  | ||||||
|  | # Tabs Studio | ||||||
|  | *.tss | ||||||
|  |  | ||||||
|  | # Telerik's JustMock configuration file | ||||||
|  | *.jmconfig | ||||||
|  |  | ||||||
|  | # BizTalk build output | ||||||
|  | *.btp.cs | ||||||
|  | *.btm.cs | ||||||
|  | *.odx.cs | ||||||
|  | *.xsd.cs | ||||||
|  |  | ||||||
|  | # OpenCover UI analysis results | ||||||
|  | OpenCover/ | ||||||
|  |  | ||||||
|  | # Azure Stream Analytics local run output | ||||||
|  | ASALocalRun/ | ||||||
|  |  | ||||||
|  | # MSBuild Binary and Structured Log | ||||||
|  | *.binlog | ||||||
|  |  | ||||||
|  | # NVidia Nsight GPU debugger configuration file | ||||||
|  | *.nvuser | ||||||
|  |  | ||||||
|  | # MFractors (Xamarin productivity tool) working folder | ||||||
|  | .mfractor/ | ||||||
|  |  | ||||||
|  | # Local History for Visual Studio | ||||||
|  | .localhistory/ | ||||||
|  |  | ||||||
|  | # Visual Studio History (VSHistory) files | ||||||
|  | .vshistory/ | ||||||
|  |  | ||||||
|  | # BeatPulse healthcheck temp database | ||||||
|  | healthchecksdb | ||||||
|  |  | ||||||
|  | # Backup folder for Package Reference Convert tool in Visual Studio 2017 | ||||||
|  | MigrationBackup/ | ||||||
|  |  | ||||||
|  | # Ionide (cross platform F# VS Code tools) working folder | ||||||
|  | .ionide/ | ||||||
|  |  | ||||||
|  | # Fody - auto-generated XML schema | ||||||
|  | FodyWeavers.xsd | ||||||
|  |  | ||||||
|  | # VS Code files for those working on multiple tools | ||||||
|  | .vscode/* | ||||||
|  | !.vscode/settings.json | ||||||
|  | !.vscode/tasks.json | ||||||
|  | !.vscode/launch.json | ||||||
|  | !.vscode/extensions.json | ||||||
|  | *.code-workspace | ||||||
|  |  | ||||||
|  | # Local History for Visual Studio Code | ||||||
|  | .history/ | ||||||
|  |  | ||||||
|  | # Windows Installer files from build outputs | ||||||
|  | *.cab | ||||||
|  | *.msi | ||||||
|  | *.msix | ||||||
|  | *.msm | ||||||
|  | *.msp | ||||||
|  |  | ||||||
|  | # JetBrains Rider | ||||||
|  | *.sln.iml | ||||||
							
								
								
									
										25
									
								
								SortingVisualization.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								SortingVisualization.sln
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  |  | ||||||
|  | Microsoft Visual Studio Solution File, Format Version 12.00 | ||||||
|  | # Visual Studio 15 | ||||||
|  | VisualStudioVersion = 15.0.27703.2035 | ||||||
|  | MinimumVisualStudioVersion = 10.0.40219.1 | ||||||
|  | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SortingVisualization", "SortingVisualization\SortingVisualization.csproj", "{3CED6ADB-ADB8-499E-8A0E-6DB4B064F514}" | ||||||
|  | EndProject | ||||||
|  | Global | ||||||
|  | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
|  | 		Debug|Any CPU = Debug|Any CPU | ||||||
|  | 		Release|Any CPU = Release|Any CPU | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||||
|  | 		{3CED6ADB-ADB8-499E-8A0E-6DB4B064F514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{3CED6ADB-ADB8-499E-8A0E-6DB4B064F514}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{3CED6ADB-ADB8-499E-8A0E-6DB4B064F514}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{3CED6ADB-ADB8-499E-8A0E-6DB4B064F514}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(SolutionProperties) = preSolution | ||||||
|  | 		HideSolutionNode = FALSE | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(ExtensibilityGlobals) = postSolution | ||||||
|  | 		SolutionGuid = {1223C2EB-90ED-4CF4-AF4F-E50B86D26D8B} | ||||||
|  | 	EndGlobalSection | ||||||
|  | EndGlobal | ||||||
							
								
								
									
										24
									
								
								SortingVisualization/Algorithms/Bubblesort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								SortingVisualization/Algorithms/Bubblesort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Bubblesort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Bubblesort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             int n = set.Size; | ||||||
|  |             do { | ||||||
|  |                 int newn = 1; | ||||||
|  |                 for (int i = 0; i < n - 1; i++) { | ||||||
|  |                     if (set.GreaterThan(i, i + 1)) { | ||||||
|  |                         set.Swap(i, i + 1); | ||||||
|  |                         newn = i + 1; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 n = newn; | ||||||
|  |             } while (n > 1); | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								SortingVisualization/Algorithms/Cocktailshakersort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								SortingVisualization/Algorithms/Cocktailshakersort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Cocktailshakersort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Cocktailshakersort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             int beginn = -1; | ||||||
|  |             int ende = set.Size - 2; | ||||||
|  |             bool vertauscht; | ||||||
|  |             do { | ||||||
|  |                 vertauscht = false; | ||||||
|  |                 beginn++; | ||||||
|  |                 for (int i = beginn; i < ende; i++) { | ||||||
|  |                     if (set.GreaterThan(i, i + 1)) { | ||||||
|  |                         set.Swap(i, i + 1); | ||||||
|  |                         vertauscht = true; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if (!vertauscht) { | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |                 vertauscht = false; | ||||||
|  |                 ende--; | ||||||
|  |                 for (int i = ende; i >= beginn - 1; i--) { | ||||||
|  |                     if (set.GreaterThan(i, i + 1)) { | ||||||
|  |                         set.Swap(i, i + 1); | ||||||
|  |                         vertauscht = true; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } while (vertauscht); | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								SortingVisualization/Algorithms/Gravitysort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								SortingVisualization/Algorithms/Gravitysort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | using System; | ||||||
|  |  | ||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Gravitysort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Gravitysort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             int i, j, max, sum; | ||||||
|  |             byte[] beads; | ||||||
|  |  | ||||||
|  |             for (i = 1, max = set.ReadOperation(0); i < set.Size; ++i) | ||||||
|  |                 if (set.ReadOperation(i) > max) | ||||||
|  |                     max = set.ReadOperation(i); | ||||||
|  |  | ||||||
|  |             beads = new byte[max * set.Size]; | ||||||
|  |  | ||||||
|  |             for (i = 0; i < set.Size; ++i) | ||||||
|  |                 for (j = 0; j < set.ReadOperation(i); ++j) | ||||||
|  |                     beads[i * max + j] = 1; | ||||||
|  |  | ||||||
|  |             for (j = 0; j < max; ++j) { | ||||||
|  |                 for (sum = i = 0; i < set.Size; ++i) { | ||||||
|  |                     sum += beads[i * max + j]; | ||||||
|  |                     beads[i * max + j] = 0; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 for (i = set.Size - sum; i < set.Size; ++i) | ||||||
|  |                     beads[i * max + j] = 1; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             for (i = 0; i < set.Size; ++i) { | ||||||
|  |                 for (j = 0; j < max && Convert.ToBoolean(beads[i * max + j]); ++j) | ||||||
|  |                     ; | ||||||
|  |                 set.WriteOperation(i, j); | ||||||
|  |             } | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								SortingVisualization/Algorithms/Insertionsort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								SortingVisualization/Algorithms/Insertionsort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Insertionsort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Insertionsort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             for (int i = 0; i < set.Size - 1; i++) { | ||||||
|  |                 for (int j = i + 1; j > 0; j--) { | ||||||
|  |                     if (set.GreaterThan(j - 1, j)) { | ||||||
|  |                         set.Swap(j - 1, j); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										57
									
								
								SortingVisualization/Algorithms/Mergesort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								SortingVisualization/Algorithms/Mergesort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Mergesort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Mergesort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             MergeSort(ref set, 0, set.Size - 1); | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |         public static void MergeSort(ref DataSet set, int l, int r) { | ||||||
|  |             if (l < r) { | ||||||
|  |                 int mid = (l / 2) + (r / 2); | ||||||
|  |                 MergeSort(ref set, l, mid); | ||||||
|  |                 MergeSort(ref set, mid + 1, r); | ||||||
|  |                 Merge(ref set, l, mid, r); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static void Merge(ref DataSet set, int l, int m, int r) { | ||||||
|  |             int left = l; | ||||||
|  |             int right = m + 1; | ||||||
|  |             int[] tmp = new int[(r - l) + 1]; | ||||||
|  |             int tmpIndex = 0; | ||||||
|  |  | ||||||
|  |             while ((left <= m) && (right <= r)) { | ||||||
|  |                 if (set.LessThan(left, right)) { | ||||||
|  |                     tmp[tmpIndex] = set.ReadOperation(left); | ||||||
|  |                     left++; | ||||||
|  |                 } else { | ||||||
|  |                     tmp[tmpIndex] = set.ReadOperation(right); | ||||||
|  |                     right++; | ||||||
|  |                 } | ||||||
|  |                 tmpIndex++; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             while (left <= m) { | ||||||
|  |                 tmp[tmpIndex] = set.ReadOperation(left); | ||||||
|  |                 left++; | ||||||
|  |                 tmpIndex++; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             while (right <= r) { | ||||||
|  |                 tmp[tmpIndex] = set.ReadOperation(right); | ||||||
|  |                 right++; | ||||||
|  |                 tmpIndex++; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             for (int i = 0; i < tmp.Length; i++) { | ||||||
|  |                 set.WriteOperation(l + i, tmp[i]); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								SortingVisualization/Algorithms/Quicksort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								SortingVisualization/Algorithms/Quicksort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Quicksort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Quicksort"; | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             SortRecursion(ref set, 0, set.Size - 1); | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |         public static void SortRecursion(ref DataSet set, int l, int r) { | ||||||
|  |             int i = l, j = r; | ||||||
|  |             int pivot = (l + r) / 2; | ||||||
|  |             while (i <= j) { | ||||||
|  |                 while (set.LessThan(i, pivot)) | ||||||
|  |                     i++; | ||||||
|  |                 while (set.GreaterThan(j, pivot)) | ||||||
|  |                     j--; | ||||||
|  |  | ||||||
|  |                 if (i <= j) { | ||||||
|  |                     set.Swap(i, j); | ||||||
|  |                     if (pivot == i) | ||||||
|  |                         pivot = j; | ||||||
|  |                     else if (pivot == j) | ||||||
|  |                         pivot = i; | ||||||
|  |                     i++; | ||||||
|  |                     j--; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (l < j) | ||||||
|  |                 SortRecursion(ref set, l, j); | ||||||
|  |             if (i < r) | ||||||
|  |                 SortRecursion(ref set, i, r); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								SortingVisualization/Algorithms/Radixsort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								SortingVisualization/Algorithms/Radixsort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Radixsort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Radixsort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             int n;                             // Fachnummer | ||||||
|  |             int[] nPart = new int[2];            // Anzahl der Elemente in den beiden Faechern | ||||||
|  |             int[,] part = new int[2, set.Size];  // die beiden Faecher haben die Groesse des Arrays a | ||||||
|  |  | ||||||
|  |             // Schleife ueber alle Bits der Schluessel (bei int: 32 Bit) | ||||||
|  |             for (int i = 0; i < 32; i++) { | ||||||
|  |                 nPart[0] = 0; | ||||||
|  |                 nPart[1] = 0; | ||||||
|  |  | ||||||
|  |                 // Partitionierungsphase: teilt "a" auf die Faecher auf | ||||||
|  |                 for (int j = 0; j < set.Size; j++) { | ||||||
|  |                     int tmp = set.ReadOperation(j); | ||||||
|  |                     n = (tmp >> i) & 1;              // ermittelt die Fachnummer: 0 oder 1 | ||||||
|  |                     part[n, nPart[n]++] = tmp;   // kopiert j-tes Element ins richtige Fach | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 // Sammelphase: kopiert die beiden Faecher wieder nach "a" zusammen | ||||||
|  |                 for (int k = 0; k < nPart[0]; k++) { | ||||||
|  |                     set.WriteOperation(k, part[0, k]); | ||||||
|  |                 } | ||||||
|  |                 for (int k = nPart[0]; k < set.Size; k++) { | ||||||
|  |                     set.WriteOperation(k, part[1, k]); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								SortingVisualization/Algorithms/Selectionsort.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								SortingVisualization/Algorithms/Selectionsort.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | namespace SortingVisualization.Algorithms { | ||||||
|  |     public class Selectionsort : SortingAlgorithm { | ||||||
|  |         public override string GetAlgorithmName() => "Selectionsort"; | ||||||
|  |  | ||||||
|  |         public override void Sort(ref DataSet set) { | ||||||
|  |             Simulate(ref set); | ||||||
|  |             System.Console.WriteLine("Doing {0}...", this.GetAlgorithmName()); | ||||||
|  |             for (int i = 0; i < set.Size; i++) { | ||||||
|  |                 int min = i; | ||||||
|  |                 for (int j = i + 1; j < set.Size; j++) | ||||||
|  |                     if (set.LessThan(j, min)) | ||||||
|  |                         min = j; | ||||||
|  |                 set.Swap(min, i); | ||||||
|  |             } | ||||||
|  |             System.Console.WriteLine("{0} complete!", this.GetAlgorithmName()); | ||||||
|  |             if (!set.SimulateMode) | ||||||
|  |                 set.FinalizeVideo(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								SortingVisualization/App.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								SortingVisualization/App.config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||||
|  | <configuration> | ||||||
|  |     <startup>  | ||||||
|  |         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> | ||||||
|  |     </startup> | ||||||
|  | </configuration> | ||||||
							
								
								
									
										420
									
								
								SortingVisualization/DataSet.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										420
									
								
								SortingVisualization/DataSet.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,420 @@ | |||||||
|  | using Accord.Video.FFMPEG; | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.Drawing; | ||||||
|  | using System.Drawing.Imaging; | ||||||
|  | using System.IO; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | namespace SortingVisualization { | ||||||
|  |     public enum SetType { | ||||||
|  |         Ordererd, | ||||||
|  |         Reversed, | ||||||
|  |         Random, | ||||||
|  |         SingleError | ||||||
|  |     } | ||||||
|  |     public class DataSet { | ||||||
|  |         #region Props | ||||||
|  |         /// <summary> | ||||||
|  |         /// Gibt die Größe (Anzahl der zu sortierenden Werte) an. | ||||||
|  |         /// </summary> | ||||||
|  |         public int Size { get; private set; } | ||||||
|  |         /// <summary> | ||||||
|  |         /// Speichert das initale Datenset um verschiedene Algorithmen auf dasselbe Set anzuwenden (direkter Vergleich). | ||||||
|  |         /// </summary> | ||||||
|  |         private readonly int[] _InitialData; | ||||||
|  |         public int Seed { get; private set; } | ||||||
|  |         private int[] _Data; | ||||||
|  |         public int ReadOperations { get; private set; } = 0; | ||||||
|  |         public int WriteOperations { get; private set; } = 0; | ||||||
|  |         public int CompareOperations { get; private set; } = 0; | ||||||
|  |         public int SwapOperations { get; private set; } = 0; | ||||||
|  |         public long Ticks { get; private set; } = 0; | ||||||
|  |         public string SortingAlgorithm { | ||||||
|  |             get => _sortingAlgorithm; | ||||||
|  |             set { | ||||||
|  |                 _sortingAlgorithm = value; | ||||||
|  |                 if (!Directory.Exists(this.SortingAlgorithm)) { | ||||||
|  |                     Directory.CreateDirectory(this.SortingAlgorithm); | ||||||
|  |                 } | ||||||
|  |                 _Directory = Path.Combine(this.SortingAlgorithm, DataSet.SetTypeToString(this.SetType)); | ||||||
|  |                 if (!Directory.Exists(_Directory)) { | ||||||
|  |                     Directory.CreateDirectory(_Directory); | ||||||
|  |                 } | ||||||
|  |                 _Directory = Path.Combine(_Directory, this.Size.ToString()); | ||||||
|  |                 if (!Directory.Exists(_Directory)) { | ||||||
|  |                     Directory.CreateDirectory(_Directory); | ||||||
|  |                 } | ||||||
|  |                 if (this.SetType == SetType.Random || this.SetType == SetType.SingleError) { | ||||||
|  |                     _Directory = Path.Combine(_Directory, this.Seed.ToString()); | ||||||
|  |                     if (!Directory.Exists(_Directory)) { | ||||||
|  |                         Directory.CreateDirectory(_Directory); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if (!VideoRenderer.IsOpen) { | ||||||
|  |                     VideoRenderer.Open(Path.Combine(_Directory, this.SortingAlgorithm + ".mkv"), 3000, 2000, new Accord.Math.Rational(60), VideoCodec.Default, int.MaxValue); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         private string _Directory = "uninitialized"; | ||||||
|  |         private long _StartTime = 0; | ||||||
|  |         public SetType SetType { get; } | ||||||
|  |         private int _ExpectedFrameCount = 1; | ||||||
|  |         private bool _simulateMode; | ||||||
|  |         private int _frameSkipping = 0; | ||||||
|  |         private int _skippedFrames = 0; | ||||||
|  |         public bool SimulateMode { | ||||||
|  |             get => _simulateMode; | ||||||
|  |             set { | ||||||
|  |                 if (value) { | ||||||
|  |                     _ExpectedFrameCount = int.MaxValue; | ||||||
|  |                     Console.WriteLine("Simulating {0} with {1} values (Set: {2} - Seed {3})...", this.SortingAlgorithm, this.Size, DataSet.SetTypeToString(this.SetType), this.Seed); | ||||||
|  |                 } else { | ||||||
|  |                     Console.WriteLine("Simulation ended! Results:\n\t{0} Reads\n\t{1} Writes\n\t{2} Comparisons\n\t{3} Swaps\n\t{4} Frames", this.ReadOperations, this.WriteOperations, this.CompareOperations, this.SwapOperations, this.FrameCount + this.Size); | ||||||
|  |                     _ExpectedFrameCount = this.FrameCount + this.Size; | ||||||
|  |                     this.ResetToInitial(); | ||||||
|  |                     _frameSkipping = _ExpectedFrameCount / 3600; | ||||||
|  |                     Console.WriteLine("Drawing 1 in every {0} frames", _frameSkipping + 1); | ||||||
|  |                     Console.SetOut(TextWriter.Null); | ||||||
|  |                 } | ||||||
|  |                 _simulateMode = value; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  |         #region Constructors | ||||||
|  |         public DataSet(int size, SetType type, int seed) { | ||||||
|  |             this.SetType = type; | ||||||
|  |             this.Seed = seed; | ||||||
|  |             this.Size = size; | ||||||
|  |             _InitialData = new int[size]; | ||||||
|  |             var rnd = new Random(seed); | ||||||
|  |             switch (type) { | ||||||
|  |                 case SetType.Ordererd: | ||||||
|  |                     for (int i = 0; i < size; i++) | ||||||
|  |                         _InitialData[i] = i + 1; | ||||||
|  |                     break; | ||||||
|  |                 case SetType.Reversed: | ||||||
|  |                     for (int i = 0; i < size; i++) | ||||||
|  |                         _InitialData[i] = size - i; | ||||||
|  |                     break; | ||||||
|  |                 case SetType.Random: | ||||||
|  |                     for (int i = 0; i < size; i++) { | ||||||
|  |                         int tmp; | ||||||
|  |                         do { | ||||||
|  |                             tmp = rnd.Next(1, size + 1); // TODO: Do this better! | ||||||
|  |                         } while (_InitialData.Contains(tmp)); | ||||||
|  |                         _InitialData[i] = tmp; | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  |                 case SetType.SingleError: | ||||||
|  |                     for (int i = 1; i < size - 1; i++) | ||||||
|  |                         _InitialData[i] = i + 1; | ||||||
|  |                     _InitialData[0] = size; | ||||||
|  |                     _InitialData[size - 1] = 1; | ||||||
|  |                     break; | ||||||
|  |                 default: | ||||||
|  |                     throw new ArgumentException("Unhandled Enumeration type when initializing the dataset values!", "type"); | ||||||
|  |             } | ||||||
|  |             _Data = new int[size]; | ||||||
|  |             _InitialData.CopyTo(_Data, 0); | ||||||
|  |             _yScale = (double)_FrameHeight / (double)(this.Size); | ||||||
|  |             _xScale = (double)_FrameWidth / (double)(this.Size); | ||||||
|  |             _BarWidth = (int)Math.Ceiling(_xScale); | ||||||
|  |         } | ||||||
|  |         public DataSet(int size, SetType type) : this(size, type, Guid.NewGuid().GetHashCode()) { } | ||||||
|  |         public override string ToString() => $"{this.SortingAlgorithm} - {this.Size} Values - {DataSet.SetTypeToString(this.SetType)} Set - Seed {this.Seed}"; | ||||||
|  |         #endregion | ||||||
|  |         #region Operations | ||||||
|  |         public static string SetTypeToString(SetType type) { | ||||||
|  |             switch (type) { | ||||||
|  |                 case SetType.Ordererd: | ||||||
|  |                     return "Ordered"; | ||||||
|  |                 case SetType.Reversed: | ||||||
|  |                     return "Reversed"; | ||||||
|  |                 case SetType.Random: | ||||||
|  |                     return "Random"; | ||||||
|  |                 case SetType.SingleError: | ||||||
|  |                     return "SingleError"; | ||||||
|  |                 default: | ||||||
|  |                     return "Unkown"; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         /// <summary> | ||||||
|  |         /// Gibt das Element des Datensets aus, das an (index + 1)-ter Stelle steht. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="index">Zugriffsindex, wirft einen Fehler, wenn der Index nicht gültig ist.</param> | ||||||
|  |         /// <returns>Kopie des Werts aus dem Datenset.</returns> | ||||||
|  |         private int this[int index] { | ||||||
|  |             get { | ||||||
|  |                 this.ReadOperations++; | ||||||
|  |                 return _Data[index]; | ||||||
|  |             } | ||||||
|  |             set { | ||||||
|  |                 this.WriteOperations++; | ||||||
|  |                 _Data[index] = value; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         /// <summary> | ||||||
|  |         /// Reads the value at an index (same as this[index]) but generates a frame. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="index"></param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public int ReadOperation(int index) { | ||||||
|  |             this.DrawReadFrame(index); | ||||||
|  |             return this[index]; | ||||||
|  |         } | ||||||
|  |         public void WriteOperation(int index, int value) { | ||||||
|  |             this[index] = value; | ||||||
|  |             this.DrawWriteFrame(index); | ||||||
|  |         } | ||||||
|  |         private void Comparation(int left, int right) { | ||||||
|  |             this.CompareOperations++; | ||||||
|  |             this.DrawCompareFrame(left, right); | ||||||
|  |         } | ||||||
|  |         public bool GreaterThan(int left, int right) { | ||||||
|  |             this.Comparation(left, right); | ||||||
|  |             return (this[left] > this[right]); | ||||||
|  |         } | ||||||
|  |         public bool GreaterThanOrEqual(int left, int right) { | ||||||
|  |             this.Comparation(left, right); | ||||||
|  |             return (this[left] >= this[right]); | ||||||
|  |         } | ||||||
|  |         public bool LessThan(int left, int right) { | ||||||
|  |             this.Comparation(left, right); | ||||||
|  |             return (this[left] < this[right]); | ||||||
|  |         } | ||||||
|  |         public bool LessThanOrEqual(int left, int right) { | ||||||
|  |             this.Comparation(left, right); | ||||||
|  |             return (this[left] <= this[right]); | ||||||
|  |         } | ||||||
|  |         public bool Equal(int left, int right) { | ||||||
|  |             this.Comparation(left, right); | ||||||
|  |             return (this[left] == this[right]); | ||||||
|  |         } | ||||||
|  |         public bool Unequal(int left, int right) { | ||||||
|  |             this.Comparation(left, right); | ||||||
|  |             return (this[left] != this[right]); | ||||||
|  |         } | ||||||
|  |         public void Swap(int left, int right) { | ||||||
|  |             int tmp = this[left]; | ||||||
|  |             this[left] = this[right]; | ||||||
|  |             this[right] = tmp; | ||||||
|  |             this.SwapOperations++; | ||||||
|  |             this.DrawSwapFrame(left, right); | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  |         #region Timing | ||||||
|  |         public void StartTimer() => _StartTime = DateTime.Now.Ticks; | ||||||
|  |         public void StopTimer() => this.Ticks = DateTime.Now.Ticks - _StartTime; | ||||||
|  |         #endregion | ||||||
|  |         #region Visualizing | ||||||
|  |         public Brush BackgroundBrush = new SolidBrush(Color.Black); | ||||||
|  |         public Brush ReadColor = new SolidBrush(Color.Blue); | ||||||
|  |         public Brush WriteColor = new SolidBrush(Color.Magenta); | ||||||
|  |         public Brush CheckColor = new SolidBrush(Color.Green); | ||||||
|  |         public Brush BarColor = new SolidBrush(Color.White); | ||||||
|  |         public Brush CompareColor = new SolidBrush(Color.Red); | ||||||
|  |         public Brush SwapColor = new SolidBrush(Color.Yellow); | ||||||
|  |         private Bitmap _Frame = new Bitmap(_FrameWidth, _FrameHeight); | ||||||
|  |         private VideoFileWriter VideoRenderer = new VideoFileWriter(); | ||||||
|  |         int _progress = 0; | ||||||
|  |         private int FrameCount { | ||||||
|  |             get => _FrameCount; | ||||||
|  |             set { | ||||||
|  |                 if (!this.SimulateMode) | ||||||
|  |                     VideoRenderer.WriteVideoFrame(_Frame); | ||||||
|  |                 // _Frame.Save(Path.Combine(this.SortingAlgorithm, DataSet.SetTypeToString(this.SetType), $"Image{ _FrameCount.ToString("d6")}.png"), ImageFormat.Png); | ||||||
|  |                 _FrameCount = value; | ||||||
|  |                 int newprogress = (_FrameCount * 100) / _ExpectedFrameCount; | ||||||
|  |                 if (newprogress > _progress) { | ||||||
|  |                     _progress = newprogress; | ||||||
|  |                     Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { | ||||||
|  |                         AutoFlush = true | ||||||
|  |                     }); | ||||||
|  |                     Console.Write("\rProgress: {0}% - {1} frames", newprogress, _FrameCount); | ||||||
|  |                     Console.SetOut(TextWriter.Null); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         private static readonly int _FrameHeight = 2000; | ||||||
|  |         private static readonly int _FrameWidth = 3000; | ||||||
|  |         private readonly double _yScale = 1; | ||||||
|  |         private readonly double _xScale = 1; | ||||||
|  |         private readonly int _BarWidth = 1; | ||||||
|  |         private int _FrameCount = 0; | ||||||
|  |         private string _sortingAlgorithm = "DefaultAlgorithm"; | ||||||
|  |  | ||||||
|  |         private void DrawFrame() { | ||||||
|  |             this.ClearFrame(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void ClearFrame() { | ||||||
|  |             DrawRect(0, 0, _FrameWidth, _FrameHeight, ref this.BackgroundBrush); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void DrawRect(int x1, int y1, int w, int h, ref Brush brush) { | ||||||
|  |             int wn = w - 1; | ||||||
|  |             if (wn <= 0) | ||||||
|  |                 wn = 1; | ||||||
|  |             int hn = h - 1; | ||||||
|  |             if (hn <= 0) | ||||||
|  |                 hn = 1; | ||||||
|  |             using (var graphics = Graphics.FromImage(_Frame)) { | ||||||
|  |                 graphics.FillRectangle(brush, x1, y1, wn, hn); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void DrawCompareFrame(int left, int right) { | ||||||
|  |             if (this.SimulateMode) { | ||||||
|  |                 this.FrameCount++; | ||||||
|  |             } else { | ||||||
|  |                 if (this.SkipFrame()) | ||||||
|  |                     return; | ||||||
|  |                 DrawFrame(); | ||||||
|  |                 for (int i = 0; i < this.Size; i++) { | ||||||
|  |                     int xpos = (int)(_xScale * i); | ||||||
|  |                     int ypos = (int)(_yScale * this._Data[i]); | ||||||
|  |                     if (i == left || i == right) | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.CompareColor); | ||||||
|  |                     else | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.BarColor); | ||||||
|  |                 } | ||||||
|  |                 ++this.FrameCount; | ||||||
|  |                 //Console.WriteLine("Compare frame {0} was drawn",this.FrameCount); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void DrawReadFrame(int index) { | ||||||
|  |             DataSet dataSet = this; | ||||||
|  |             if (dataSet.SimulateMode) { | ||||||
|  |                 this.FrameCount++; | ||||||
|  |             } else { | ||||||
|  |                 if (this.SkipFrame()) | ||||||
|  |                     return; | ||||||
|  |                 DrawFrame(); | ||||||
|  |                 for (int i = 0; i < this.Size; i++) { | ||||||
|  |                     int xpos = (int)(_xScale * i); | ||||||
|  |                     int ypos = (int)(_yScale * this._Data[i]); | ||||||
|  |                     if (i == index) | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.ReadColor); | ||||||
|  |                     else | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.BarColor); | ||||||
|  |                 } | ||||||
|  |                 ++this.FrameCount; | ||||||
|  |                 //Console.WriteLine("Read frame {0} was drawn", this.FrameCount); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void DrawWriteFrame(int index) { | ||||||
|  |             if (this.SimulateMode) { | ||||||
|  |                 this.FrameCount++; | ||||||
|  |             } else { | ||||||
|  |                 if (this.SkipFrame()) | ||||||
|  |                     return; | ||||||
|  |                 DrawFrame(); | ||||||
|  |                 for (int i = 0; i < this.Size; i++) { | ||||||
|  |                     int xpos = (int)(_xScale * i); | ||||||
|  |                     int ypos = (int)(_yScale * this._Data[i]); | ||||||
|  |                     if (i == index) | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.WriteColor); | ||||||
|  |                     else | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.BarColor); | ||||||
|  |                 } | ||||||
|  |                 ++this.FrameCount; | ||||||
|  |                 //Console.WriteLine("Write frame {0} was drawn", this.FrameCount); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void DrawSwapFrame(int left, int right) { | ||||||
|  |             if (this.SimulateMode) { | ||||||
|  |                 this.FrameCount++; | ||||||
|  |             } else { | ||||||
|  |                 if (this.SkipFrame()) | ||||||
|  |                     return; | ||||||
|  |                 DrawFrame(); | ||||||
|  |                 for (int i = 0; i < this.Size; i++) { | ||||||
|  |                     int xpos = (int)(_xScale * i); | ||||||
|  |                     int ypos = (int)(_yScale * this._Data[i]); | ||||||
|  |                     if (i == left || i == right) | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.SwapColor); | ||||||
|  |                     else | ||||||
|  |                         DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.BarColor); | ||||||
|  |                 } | ||||||
|  |                 ++this.FrameCount; | ||||||
|  |                 //Console.WriteLine("Swap frame {0} was drawn", this.FrameCount); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private bool SkipFrame() { | ||||||
|  |             if (_skippedFrames++ < _frameSkipping) { | ||||||
|  |                 ++this._FrameCount; // Avoid automatic drawing trough property | ||||||
|  |                 return true; | ||||||
|  |             } else { | ||||||
|  |                 _skippedFrames = 0; | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public void FinalizeVideo() { | ||||||
|  |             Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { | ||||||
|  |                 AutoFlush = true | ||||||
|  |             }); | ||||||
|  |             Console.WriteLine("\n\nFinalizing..."); | ||||||
|  |             for (int i = 0; i < this.Size; i++) { | ||||||
|  |                 int xpos = (int)(_xScale * i); | ||||||
|  |                 int ypos = (int)(_yScale * this._Data[i]); | ||||||
|  |                 DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.BarColor); | ||||||
|  |             } | ||||||
|  |             //if (!this.SkipFrame()) | ||||||
|  |                 ++this.FrameCount; | ||||||
|  |             //Console.WriteLine("Finalizing Frame {0} was drawn", this.FrameCount); | ||||||
|  |             for (int d = 0; d < this.Size; d++) { // Add 1 checked bar per frame | ||||||
|  |                 int xpos = (int)(_xScale * d); | ||||||
|  |                 int ypos = (int)(_yScale * this._Data[d]); | ||||||
|  |                 DrawRect(xpos, _FrameHeight - ypos, _BarWidth, ypos, ref this.CheckColor); | ||||||
|  |                 //if (this.SkipFrame()) | ||||||
|  |                 //    continue; | ||||||
|  |                 ++this.FrameCount; | ||||||
|  |                 //Console.WriteLine("Finalizing Frame {0} was drawn", this.FrameCount); | ||||||
|  |             } | ||||||
|  |             Console.WriteLine("Encoding video from frames..."); | ||||||
|  |             //var startInfo = new System.Diagnostics.ProcessStartInfo { | ||||||
|  |             //    WorkingDirectory = _Directory, | ||||||
|  |             //    WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, | ||||||
|  |             //    FileName = "ffmpeg.exe", | ||||||
|  |             //    Arguments = $"-r 60 -f image2 -s {_FrameWidth}x{_FrameHeight} -i Image%06d.png -vcodec libx264 -crf 25  -pix_fmt yuv420p {this.SortingAlgorithm}.mp4", | ||||||
|  |             //    RedirectStandardInput = true, | ||||||
|  |             //    UseShellExecute = false, | ||||||
|  |             //    RedirectStandardOutput = true, | ||||||
|  |             //    CreateNoWindow = false | ||||||
|  |             //}; | ||||||
|  |             //Process.Start(startInfo); | ||||||
|  |             VideoRenderer.Close(); | ||||||
|  |             VideoRenderer.Dispose(); | ||||||
|  |             VideoRenderer = null; | ||||||
|  |             VideoRenderer = new VideoFileWriter(); | ||||||
|  |             Console.WriteLine("Video encoded!"); | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  |         #region Resetting | ||||||
|  |         public void ResetToInitial() { | ||||||
|  |             _Data = null; | ||||||
|  |             _Data = new int[this.Size]; | ||||||
|  |             _InitialData.CopyTo(_Data, 0); | ||||||
|  |             _Frame?.Dispose(); | ||||||
|  |             _Frame = null; | ||||||
|  |             _Frame = new Bitmap(_FrameWidth, _FrameHeight); | ||||||
|  |             this.ReadOperations = 0; | ||||||
|  |             this.WriteOperations = 0; | ||||||
|  |             this.CompareOperations = 0; | ||||||
|  |             this.Ticks = 0; | ||||||
|  |             this.FrameCount = 0; | ||||||
|  |             this._progress = 0; | ||||||
|  |             this._skippedFrames = 0; | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										96
									
								
								SortingVisualization/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								SortingVisualization/Program.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | |||||||
|  | using SortingVisualization.Algorithms; | ||||||
|  | using System; | ||||||
|  |  | ||||||
|  | namespace SortingVisualization { | ||||||
|  |     class Program { | ||||||
|  |         static void Main(string[] args) { | ||||||
|  |             SortingAlgorithm sort; | ||||||
|  |             Console.WriteLine("Select an algorithm:\n\t1. Bubblesort\n\t2. Insertion Sort\n\t3. Selection Sort\n\t4. Quicksort\n\t5. Radixsort\n\t6. Shell Sort\n\t7. Mergesort\n\t8. Heapsort\n\t9. Cocktailshakersort\n\t10. Gravitysort"); | ||||||
|  |             string input; | ||||||
|  |  | ||||||
|  |             int SetSize = 20; | ||||||
|  |             int selection; | ||||||
|  |             do { input = Console.ReadLine(); } | ||||||
|  |             while (!int.TryParse(input, out selection)); | ||||||
|  |             switch (selection) { | ||||||
|  |                 case 1: | ||||||
|  |                     sort = new Bubblesort(); | ||||||
|  |                     break; | ||||||
|  |                 case 2: | ||||||
|  |                     sort = new Insertionsort(); | ||||||
|  |                     break; | ||||||
|  |                 case 3: | ||||||
|  |                     sort = new Selectionsort(); | ||||||
|  |                     break; | ||||||
|  |                 case 4: | ||||||
|  |                     sort = new Quicksort(); | ||||||
|  |                     break; | ||||||
|  |                 case 5: | ||||||
|  |                     sort = new Radixsort(); | ||||||
|  |                     break; | ||||||
|  |                 case 7: | ||||||
|  |                     sort = new Mergesort(); | ||||||
|  |                     break; | ||||||
|  |                 case 9: | ||||||
|  |                     sort = new Cocktailshakersort(); | ||||||
|  |                     break; | ||||||
|  |                 case 10: | ||||||
|  |                     sort = new Gravitysort(); | ||||||
|  |                     break; | ||||||
|  |                 default: | ||||||
|  |                     Console.WriteLine("Not Implemented or invalid selection!"); | ||||||
|  |                     return; | ||||||
|  |             } | ||||||
|  |             Console.WriteLine("Select the set Size:"); | ||||||
|  |             do { | ||||||
|  |                 input = Console.ReadLine(); | ||||||
|  |             } while (!int.TryParse(input, out SetSize)); | ||||||
|  |             Console.WriteLine("Select a set:\n\t1. Random\n\t2. Ordered\n\t3. Reversed\n\t4. Single Error"); | ||||||
|  |             do { input = Console.ReadLine(); } | ||||||
|  |             while (!int.TryParse(input, out selection)); | ||||||
|  |             SetType type; | ||||||
|  |             switch (selection) { | ||||||
|  |                 case 1: | ||||||
|  |                     type = SetType.Random; | ||||||
|  |                     break; | ||||||
|  |                 case 2: | ||||||
|  |                     type = SetType.Ordererd; | ||||||
|  |                     break; | ||||||
|  |                 case 3: | ||||||
|  |                     type = SetType.Reversed; | ||||||
|  |                     break; | ||||||
|  |                 case 4: | ||||||
|  |                     type = SetType.SingleError; | ||||||
|  |                     break; | ||||||
|  |                 default: | ||||||
|  |                     Console.WriteLine("Not Implemented or invalid selection!"); | ||||||
|  |                     return; | ||||||
|  |             } | ||||||
|  |             DataSet set; | ||||||
|  |             if (type == SetType.Random || type == SetType.SingleError) { | ||||||
|  |                 Console.WriteLine("Do you want to enter a seed? (y/n)"); | ||||||
|  |                 ConsoleKeyInfo key; | ||||||
|  |                 do { | ||||||
|  |                     int seed; | ||||||
|  |                     key = Console.ReadKey(true); | ||||||
|  |                     if (key.Key == ConsoleKey.Y) { | ||||||
|  |                         Console.WriteLine("Enter a seed: "); | ||||||
|  |                         do { | ||||||
|  |                             input = Console.ReadLine(); | ||||||
|  |                         } while (!int.TryParse(input, out seed)); | ||||||
|  |                         set = new DataSet(SetSize, type, seed); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                     if (key.Key == ConsoleKey.N) { | ||||||
|  |                         Console.WriteLine("Generating with random seed..."); | ||||||
|  |                         set = new DataSet(SetSize, type); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } while (true); | ||||||
|  |             } else { | ||||||
|  |                 set = new DataSet(SetSize, type); | ||||||
|  |             } | ||||||
|  |             sort.Sort(ref set); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								SortingVisualization/Properties/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								SortingVisualization/Properties/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -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("SortingVisualization")] | ||||||
|  | [assembly: AssemblyDescription("")] | ||||||
|  | [assembly: AssemblyConfiguration("")] | ||||||
|  | [assembly: AssemblyCompany("")] | ||||||
|  | [assembly: AssemblyProduct("SortingVisualization")] | ||||||
|  | [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("3ced6adb-adb8-499e-8a0e-6db4b064f514")] | ||||||
|  |  | ||||||
|  | // 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, | ||||||
|  | // übernehmen, indem Sie "*" eingeben: | ||||||
|  | // [assembly: AssemblyVersion("1.0.*")] | ||||||
|  | [assembly: AssemblyVersion("1.0.0.0")] | ||||||
|  | [assembly: AssemblyFileVersion("1.0.0.0")] | ||||||
							
								
								
									
										14
									
								
								SortingVisualization/SortingAlgorithm.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								SortingVisualization/SortingAlgorithm.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | namespace SortingVisualization { | ||||||
|  |     public abstract class SortingAlgorithm { | ||||||
|  |         public abstract void Sort(ref DataSet set); | ||||||
|  |         public abstract string GetAlgorithmName(); | ||||||
|  |         public void Simulate(ref DataSet set) { | ||||||
|  |             if (!set.SimulateMode) { | ||||||
|  |                 set.SimulateMode = true; | ||||||
|  |                 Sort(ref set); | ||||||
|  |                 set.SimulateMode = false; | ||||||
|  |                 set.SortingAlgorithm = this.GetAlgorithmName(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										84
									
								
								SortingVisualization/SortingVisualization.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								SortingVisualization/SortingVisualization.csproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||||||
|  |     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||||||
|  |     <ProjectGuid>{3CED6ADB-ADB8-499E-8A0E-6DB4B064F514}</ProjectGuid> | ||||||
|  |     <OutputType>Exe</OutputType> | ||||||
|  |     <RootNamespace>SortingVisualization</RootNamespace> | ||||||
|  |     <AssemblyName>SortingVisualization</AssemblyName> | ||||||
|  |     <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> | ||||||
|  |     <FileAlignment>512</FileAlignment> | ||||||
|  |     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | ||||||
|  |     <NuGetPackageImportStamp> | ||||||
|  |     </NuGetPackageImportStamp> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||||||
|  |     <PlatformTarget>AnyCPU</PlatformTarget> | ||||||
|  |     <DebugSymbols>true</DebugSymbols> | ||||||
|  |     <DebugType>full</DebugType> | ||||||
|  |     <Optimize>false</Optimize> | ||||||
|  |     <OutputPath>bin\Debug\</OutputPath> | ||||||
|  |     <DefineConstants>DEBUG;TRACE</DefineConstants> | ||||||
|  |     <ErrorReport>prompt</ErrorReport> | ||||||
|  |     <WarningLevel>4</WarningLevel> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||||||
|  |     <PlatformTarget>AnyCPU</PlatformTarget> | ||||||
|  |     <DebugType>pdbonly</DebugType> | ||||||
|  |     <Optimize>true</Optimize> | ||||||
|  |     <OutputPath>bin\Release\</OutputPath> | ||||||
|  |     <DefineConstants>TRACE</DefineConstants> | ||||||
|  |     <ErrorReport>prompt</ErrorReport> | ||||||
|  |     <WarningLevel>4</WarningLevel> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Reference Include="Accord, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7, processorArchitecture=MSIL"> | ||||||
|  |       <HintPath>..\packages\Accord.3.8.0\lib\net46\Accord.dll</HintPath> | ||||||
|  |     </Reference> | ||||||
|  |     <Reference Include="Accord.Video, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7, processorArchitecture=MSIL"> | ||||||
|  |       <HintPath>..\packages\Accord.Video.3.8.0\lib\net46\Accord.Video.dll</HintPath> | ||||||
|  |     </Reference> | ||||||
|  |     <Reference Include="Accord.Video.FFMPEG, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7, processorArchitecture=x86"> | ||||||
|  |       <HintPath>..\packages\Accord.Video.FFMPEG.3.8.0\lib\net46\Accord.Video.FFMPEG.dll</HintPath> | ||||||
|  |     </Reference> | ||||||
|  |     <Reference Include="System" /> | ||||||
|  |     <Reference Include="System.Core" /> | ||||||
|  |     <Reference Include="System.Drawing" /> | ||||||
|  |     <Reference Include="System.Xml.Linq" /> | ||||||
|  |     <Reference Include="System.Data.DataSetExtensions" /> | ||||||
|  |     <Reference Include="Microsoft.CSharp" /> | ||||||
|  |     <Reference Include="System.Data" /> | ||||||
|  |     <Reference Include="System.Net.Http" /> | ||||||
|  |     <Reference Include="System.Xml" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Compile Include="Algorithms\Gravitysort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Cocktailshakersort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Radixsort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Selectionsort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Insertionsort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Mergesort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Quicksort.cs" /> | ||||||
|  |     <Compile Include="Algorithms\Bubblesort.cs" /> | ||||||
|  |     <Compile Include="DataSet.cs" /> | ||||||
|  |     <Compile Include="SortingAlgorithm.cs" /> | ||||||
|  |     <Compile Include="Program.cs" /> | ||||||
|  |     <Compile Include="Properties\AssemblyInfo.cs" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <None Include="App.config" /> | ||||||
|  |     <None Include="packages.config" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||||||
|  |   <Import Project="..\packages\Accord.3.8.0\build\Accord.targets" Condition="Exists('..\packages\Accord.3.8.0\build\Accord.targets')" /> | ||||||
|  |   <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | ||||||
|  |     <PropertyGroup> | ||||||
|  |       <ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText> | ||||||
|  |     </PropertyGroup> | ||||||
|  |     <Error Condition="!Exists('..\packages\Accord.3.8.0\build\Accord.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Accord.3.8.0\build\Accord.targets'))" /> | ||||||
|  |     <Error Condition="!Exists('..\packages\Accord.Video.FFMPEG.3.8.0\build\Accord.Video.FFMPEG.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Accord.Video.FFMPEG.3.8.0\build\Accord.Video.FFMPEG.targets'))" /> | ||||||
|  |   </Target> | ||||||
|  |   <Import Project="..\packages\Accord.Video.FFMPEG.3.8.0\build\Accord.Video.FFMPEG.targets" Condition="Exists('..\packages\Accord.Video.FFMPEG.3.8.0\build\Accord.Video.FFMPEG.targets')" /> | ||||||
|  | </Project> | ||||||
							
								
								
									
										6
									
								
								SortingVisualization/packages.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								SortingVisualization/packages.config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <packages> | ||||||
|  |   <package id="Accord" version="3.8.0" targetFramework="net461" /> | ||||||
|  |   <package id="Accord.Video" version="3.8.0" targetFramework="net461" /> | ||||||
|  |   <package id="Accord.Video.FFMPEG" version="3.8.0" targetFramework="net461" /> | ||||||
|  | </packages> | ||||||
		Reference in New Issue
	
	Block a user