-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.h
More file actions
75 lines (67 loc) · 1.93 KB
/
utils.h
File metadata and controls
75 lines (67 loc) · 1.93 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
namespace bsoft::Utils{
template<typename T> void bubbleSort(T *values, int length);
void quickSort(int* values, int length);
void mergeSort(int* values, int start, int end);
template<typename T, typename R>
T binarySearch(T* values, int length, R query);
}
template<typename T>
void bsoft::Utils::bubbleSort(T *values, int length){
for(int i=0; i<length; i++){
for(int j=0; j<length - 1; j++){
if(values[j] > values[j + 1]){
T a = values[j], b = values[j+1];
values[j+1] = a; values[j] = b;
}
}
}
}
void bsoft::Utils::quickSort(int *values, int length){
}
void bsoft::Utils::mergeSort(int *values, int start, int end){
int size = end - start + 1;
if(size == 2 && values[start] > values[end]){
int a = values[start], b = values[end];
values[start] = b; values[end] = a;
}else if(size > 2){
int mid = (start + end)/2, leftSize = mid - start + 1;
int leftEnd = start + leftSize;
int rightSize = end - mid, rightEnd = rightSize + mid + 1;
mergeSort(values, start, mid);
mergeSort(values, mid + 1, end);
int index = 0, init[size], i = start, j = mid + 1;
do{
if(values[i] <= values[j]){
init[index++] = values[i++];
}else{
init[index++] = values[j++];
}
}while(i < leftEnd && j < rightEnd);
while(i < leftEnd){ init[index++] = values[i++]; }
while(j < rightEnd){ init[index++] = values[j++]; }
for(int i = 0; i < index; i++){
values[start + i] = init[i];
}
}
}
template<typename T, typename R>
T bsoft::Utils::binarySearch(T *values, int leghth, R query){
if(values[0] < query && values[leghth-1] > query){
int start = 0, end = leghth-1,mid;
do{
int mid = (end + start)/2;
if(values[mid] == query){
return values[mid];
}else if(values[mid] < query){
start = mid + 1;
}else{
end = mid;
}
}while(start != end);
}else if(values[0] == query){
return values[0];
}else if(values[leghth - 1] == query){
return values[leghth - 1];
}
return NULL;
}