Initial commit from 29th of August 2018
This commit is contained in:
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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user