-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContainer.cpp
More file actions
75 lines (67 loc) · 2.25 KB
/
Container.cpp
File metadata and controls
75 lines (67 loc) · 2.25 KB
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
//------------------------------------------------------------------------------
// Container.cpp - Container handling functions.
//------------------------------------------------------------------------------
#include "Container.h"
#include <stdio.h>
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Clear data from Container.
void Container::Clear(Container &c) {
for (int i = 0; i < c.len; i++) {
delete c.cont[i];
}
c.len = 0;
}
//------------------------------------------------------------------------------
// Input Container's data.
void Container::In(FILE *file) {
while (len < 30000 && !feof(file)) {
if ((cont[len] = Language::InSt(file)) != nullptr) {
len++;
}
}
}
// Random input to Container.
void Container::InRnd(Container &c, int size) {
while (c.len < 30000 && c.len < size) {
if ((c.cont[c.len] = Language::InRnd()) != nullptr) {
c.len++;
}
}
}
//------------------------------------------------------------------------------
// Output Container data.
void Container::Out(Container &c, FILE *file) {
fprintf(file, "%s%d%s", "Container contains ", c.len, " elements.");
for (int i = 0; i < c.len; i++) {
fprintf(file, "%s", "\n");
//Out(*(c.cont[i]), file);
}
}
//------------------------------------------------------------------------------
// Shaker sort for container.
void Container::ShakerSort(Container &c, int size) {
bool swapped = true;
int start = 0;
int end = size - 1;
while (swapped) {
swapped = false;
for (int i = start; i < end; ++i) {
if (Language::Average(*c.cont[i]) < Language::Average(*c.cont[i + 1])) {
Language::Swap(*c.cont[i], *c.cont[i + 1]);
swapped = true;
}
}
if (!swapped)
break;
swapped = false;
--end;
for (int i = end - 1; i >= start; --i) {
if (Language::Average(*c.cont[i]) < Language::Average(*c.cont[i + 1])) {
Language::Swap(*c.cont[i], *c.cont[i + 1]);
swapped = true;
}
}
++start;
}
}