Skip to content

Commit f2adfb3

Browse files
committed
Refactor Main
Implement Bubble Sort
1 parent a24f2e8 commit f2adfb3

File tree

11 files changed

+368
-172
lines changed

11 files changed

+368
-172
lines changed

README.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
# pure-data-structures-and-algorithms-csharp
22
Data structures and algorithms implementation in pure csharp
33

4-
Data structures that have been implemented so far:
4+
### Data structures that have been implemented so far:
55
- Arrays Introduction
6-
- Array List
7-
- List List
8-
- Singly Linked List
9-
- Doubly Linked List
10-
- Stack (Array Implementation)
11-
- LinkedListStack (SinglyLinkedList Implementation)
12-
- LinkedListQueue (SinglyLinkedList Implementation)
6+
- Lists:
7+
- Array List
8+
- List
9+
- Singly Linked List
10+
- Doubly Linked List
11+
- Queues
12+
- LinkedListQueue (SinglyLinkedList Implementation)
13+
- Stacks
14+
- Stack (Array Implementation)
15+
- LinkedListStack (SinglyLinkedList Implementation)
16+
- Hash Table
17+
- HashTable Open Addressing (Linear Probing)
18+
- HashTable Chaining (Separate Chaining)
19+
20+
### Sorting algorithms that have been implemented so far:
21+
- Bubble Sort

src/Algorithms/ArrayHelper.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace Algorithms;
2+
3+
public static class ArrayHelper
4+
{
5+
public static void Print<T>(string title, IReadOnlyList<T> array)
6+
{
7+
if(!string.IsNullOrEmpty(title))
8+
Console.Write(title + "\t");
9+
10+
for (var i = 0; i < array.Count; i++)
11+
{
12+
if(i == array.Count - 1)
13+
Console.WriteLine(array[i]);
14+
else
15+
{
16+
Console.Write(array[i] + ", ");
17+
}
18+
}
19+
}
20+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
namespace Algorithms.Sorting;
2+
3+
public static class BubbleSort
4+
{
5+
private static void Swap<T>(ref T left, ref T right)
6+
{
7+
(left, right) = (right, left);
8+
}
9+
10+
public static void Sort<T>(T[] array, bool print = false)
11+
where T : IComparable
12+
{
13+
if (print) ArrayHelper.Print($"Original:", array);
14+
15+
for (var i = array.Length - 1; i >= 0; i--)
16+
{
17+
for (var j = 0; j <= i - 1; j++)
18+
{
19+
if (array[j].CompareTo(array[j + 1]) > 0)
20+
Swap(ref array[j], ref array[j + 1]);
21+
}
22+
23+
if (print) ArrayHelper.Print($"Step {i}", array);
24+
}
25+
}
26+
27+
public static void ImprovedSort<T>(T[] array, bool print = false)
28+
where T : IComparable
29+
{
30+
if (print) ArrayHelper.Print($"Original:", array);
31+
32+
var swapped = true;
33+
for (var i = array.Length - 1; i >= 0 && swapped; i--)
34+
{
35+
swapped = false;
36+
for (var j = 0; j <= i - 1; j++)
37+
{
38+
if (array[j].CompareTo(array[j + 1]) <= 0) continue;
39+
40+
Swap(ref array[j], ref array[j + 1]);
41+
swapped = true;
42+
}
43+
44+
if (print) ArrayHelper.Print($"Step {i}, Swapped: {swapped}", array);
45+
}
46+
}
47+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Algorithms.Sorting;
2+
3+
namespace ConsoleApp.Algorithms;
4+
5+
public static class Sorting
6+
{
7+
private static void Sort()
8+
{
9+
var array = new[] { 6, 3, 5, 2 };
10+
11+
BubbleSort.Sort(array, true);
12+
}
13+
14+
private static void ImprovedSort()
15+
{
16+
var array = new[] { 2,5,3,6};
17+
18+
BubbleSort.ImprovedSort(array, true);
19+
}
20+
21+
public static void Use()
22+
{
23+
Console.WriteLine("Sort:");
24+
Sort();
25+
Console.WriteLine("---------------------------------");
26+
27+
Console.WriteLine("ImprovedSort:");
28+
ImprovedSort();
29+
}
30+
}

src/ConsoleApp/ConsoleApp.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11+
<ProjectReference Include="..\Algorithms\Algorithms.csproj" />
1112
<ProjectReference Include="..\DataStructures\DataStructures.csproj" />
1213
</ItemGroup>
1314

src/ConsoleApp/Ds/Arrays.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using DataStructures.AbstractDataTypes.Arrays;
2+
3+
namespace ConsoleApp.Ds;
4+
5+
public static class Arrays
6+
{
7+
private static void ArrayUsage()
8+
{
9+
SimpleArray.Sort(new[] { 7, 5, 3, 9 });
10+
}
11+
12+
public static void Use()
13+
{
14+
ArrayUsage();
15+
}
16+
}

src/ConsoleApp/Ds/Hashes.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using DataStructures.AbstractDataTypes.Hashes;
2+
3+
namespace ConsoleApp.Ds;
4+
5+
public static class Hashes
6+
{
7+
private static void HashSetUsage()
8+
{
9+
var set = new DataStructures.AbstractDataTypes.Hashes.HashSet<string>();
10+
set.Add("Name 1");
11+
set.Add("Name 2");
12+
set.Add("Name 3");
13+
set.Add("Name 4");
14+
set.Add("Name 5");
15+
set.Add("Name 6");
16+
17+
var isExist = set.Contains("Name 2");
18+
Console.WriteLine(isExist);
19+
//set.Remove("Name 2");
20+
}
21+
22+
private static void HashTableLinearProbingUsage()
23+
{
24+
var hashTable = new HashTableLinearProbing<int>(2);
25+
for (var i = 0; i < 50; i++)
26+
{
27+
hashTable.Add(i);
28+
}
29+
Console.WriteLine($"Table Count:{hashTable.Count}");
30+
foreach (var item in hashTable)
31+
{
32+
Console.WriteLine($"Item:{item}");
33+
}
34+
hashTable.Remove(2);
35+
hashTable.Contains(2);
36+
Console.WriteLine($"Table New Count:{hashTable.Count}");
37+
}
38+
39+
private static void HashTableSeparateChainingUsage()
40+
{
41+
var hashTable = new HashTableSeparateChaining<int>(4);
42+
for (var i = 0; i < 50; i++)
43+
{
44+
hashTable.Add(i);
45+
}
46+
Console.Write($"Table Count:{hashTable.Count}");
47+
foreach (var item in hashTable)
48+
{
49+
Console.WriteLine(item);
50+
}
51+
52+
var exists = hashTable.Contains(4);
53+
Console.WriteLine(exists);
54+
}
55+
56+
public static void Use()
57+
{
58+
HashSetUsage();
59+
HashTableLinearProbingUsage();
60+
HashTableSeparateChainingUsage();
61+
}
62+
}

src/ConsoleApp/Ds/Lists.cs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using DataStructures.AbstractDataTypes.Lists;
2+
3+
namespace ConsoleApp.Ds;
4+
5+
public static class Lists
6+
{
7+
private static void ArrayListUsage()
8+
{
9+
var arrayList = new ArrayList
10+
{
11+
"Item 1",
12+
2
13+
};
14+
var exists = arrayList.Contains(2);
15+
Console.WriteLine($"Element 2 Exists: {exists}");
16+
}
17+
18+
private static void ListUsage()
19+
{
20+
var list = new DataStructures.AbstractDataTypes.Lists.List<int>
21+
{
22+
1,
23+
2,
24+
3,
25+
4
26+
};
27+
28+
foreach (var item in list)
29+
{
30+
Console.WriteLine(item);
31+
}
32+
}
33+
34+
private static void SinglyLinkedListUsage()
35+
{
36+
var ll = new SinglyLinkedList<int>();
37+
ll.AddLast(5);
38+
ll.AddLast(2);
39+
ll.AddLast(3);
40+
41+
foreach (var i in ll)
42+
{
43+
Console.WriteLine(i);
44+
}
45+
46+
var last = ll[2];
47+
Console.WriteLine(last);
48+
ll.Remove(1);
49+
Console.WriteLine($"Count:{ll.Count}");
50+
}
51+
52+
private static void DoublyLinkedListUsage()
53+
{
54+
var ll = new DoublyLinkedList<int>();
55+
ll.AddLast(5);
56+
ll.AddLast(2);
57+
ll.AddLast(3);
58+
59+
foreach (var i in ll)
60+
{
61+
Console.WriteLine(i);
62+
}
63+
64+
ll.Insert(3, 1);
65+
ll.Remove(3);
66+
}
67+
68+
public static void Use()
69+
{
70+
ArrayListUsage();
71+
ListUsage();
72+
SinglyLinkedListUsage();
73+
DoublyLinkedListUsage();
74+
}
75+
}

src/ConsoleApp/Ds/Queues.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using DataStructures.AbstractDataTypes.Queues;
2+
3+
namespace ConsoleApp.Ds;
4+
5+
public static class Queues
6+
{
7+
private static void LinedListQueueUsage()
8+
{
9+
var queue = new LinkedListQueue<int>();
10+
queue.Enqueue(1);
11+
queue.Enqueue(2);
12+
queue.Enqueue(3);
13+
queue.Enqueue(4);
14+
15+
var first = queue.Peek();
16+
var e1 = queue.Dequeue();
17+
var e2 = queue.Dequeue();
18+
var e3 = queue.Dequeue();
19+
var e4 = queue.Dequeue();
20+
21+
Console.WriteLine(first);
22+
Console.WriteLine(e1);
23+
Console.WriteLine(e2);
24+
Console.WriteLine(e3);
25+
Console.WriteLine(e4);
26+
}
27+
28+
public static void Use()
29+
{
30+
LinedListQueueUsage();
31+
}
32+
}

src/ConsoleApp/Ds/Stacks.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using DataStructures.AbstractDataTypes.Stacks;
2+
3+
namespace ConsoleApp.Ds;
4+
5+
public static class Stacks
6+
{
7+
private static void StackUsage()
8+
{
9+
var stack = new DataStructures.AbstractDataTypes.Stacks.Stack<int>();
10+
stack.Push(1);
11+
stack.Push(2);
12+
stack.Push(3);
13+
stack.Push(4);
14+
15+
var last = stack.Peek();
16+
var e1 = stack.Pop();
17+
var e2 = stack.Pop();
18+
var e3 = stack.Pop();
19+
var e4 = stack.Pop();
20+
21+
Console.WriteLine(last);
22+
Console.WriteLine(e1);
23+
Console.WriteLine(e2);
24+
Console.WriteLine(e3);
25+
Console.WriteLine(e4);
26+
}
27+
28+
private static void LinkedListStackUsage()
29+
{
30+
var stack = new LinkedListStack<int>();
31+
stack.Push(1);
32+
stack.Push(2);
33+
stack.Push(3);
34+
stack.Push(4);
35+
36+
var last = stack.Peek();
37+
var e1 = stack.Pop();
38+
var e2 = stack.Pop();
39+
var e3 = stack.Pop();
40+
var e4 = stack.Pop();
41+
42+
Console.WriteLine(last);
43+
Console.WriteLine(e1);
44+
Console.WriteLine(e2);
45+
Console.WriteLine(e3);
46+
Console.WriteLine(e4);
47+
}
48+
49+
public static void Use()
50+
{
51+
StackUsage();
52+
LinkedListStackUsage();
53+
}
54+
}

0 commit comments

Comments
 (0)