Initial commit from 29th of August 2018

This commit is contained in:
2018-08-29 17:02:00 +02:00
commit a7923bfd04
17 changed files with 1360 additions and 0 deletions

View 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();
}
}
}

View 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();
}
}
}

View 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();
}
}
}

View 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();
}
}
}

View 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]);
}
}
}
}

View 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);
}
}
}

View 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();
}
}
}

View 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();
}
}
}