-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
90 lines (66 loc) · 1.6 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using queues;
Console.WriteLine("Creating queue");
MyQueue queue = new MyQueue();
Console.WriteLine("Pushing some values");
queue.Push(5);
queue.Push(99);
queue.Push(555);
queue.Print();
Console.WriteLine("Pop element");
queue.Pop();
queue.Print();
Console.WriteLine("Push another element");
queue.Push(111);
queue.Print();
Console.WriteLine("Clear all queue");
queue.Clear();
queue.Print();
Console.WriteLine("Push elements for test");
queue.Push(5);
queue.Push(99);
queue.Push(555);
queue.Push(111);
queue.Push(1);
queue.Print();
Console.WriteLine("Get element with id 2");
Console.WriteLine($"\n{queue.Get(2)}\n");
Console.WriteLine("Change element with id 2 to 9999");
queue.Set(2, 9999);
Console.WriteLine("Get element with id 2");
Console.WriteLine($"\n{queue.Get(2)}\n");
queue.Print();
Console.WriteLine("Quicksorting queue");
int? count = queue.Count();
int temp = 0;
if (count != null)
temp = (int)count;
QuickSort(queue, 0, temp - 1);
queue.Print();
queue.Clear();
static int Partition(MyQueue queue, int start, int end)
{
var pivot = queue.Get((start + end) / 2);
var l = start;
var r = end;
while (l <= r)
{
while (queue.Get(l) < pivot)
l++;
while (queue.Get(r) > pivot)
r--;
if (l >= r)
break;
queue.Swap(l++, r--);
}
return r;
}
static void QuickSort(MyQueue queue, int minIndex, int maxIndex)
{
if (minIndex >= maxIndex)
{
return;
}
int pivot = Partition(queue, minIndex, maxIndex);
QuickSort(queue, minIndex, pivot);
QuickSort(queue, pivot + 1, maxIndex);
}