-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathIntegrador2.cpp
151 lines (144 loc) · 3.96 KB
/
Integrador2.cpp
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <cstdlib>//srand
#include <ctime>//time
#include <cstdio>//printf
#include <iostream>
#include <functional>
#include <string>
using std::function;
using std::cin;
using std::string;
template <class G>
class Vector {
private:
G* arr;
long id;
unsigned long size;
public:
Vector(unsigned long size=10):size(size),id(-1) {
arr = new G[size];
}
/*void increment() {
G* arrT= new G[size*1.3];
for (size_t i = 0;i < size;++i) {
arrT[i] = arr[i];
}
delete arr;
arr = arrT;
}*/
void swap(G* a, G* b)
{
G temp = *a;
*a = *b;
*b = temp;
}
void randomize()
{
for (int i = id; i > 0; i--)
{
int j = rand() % (i + 1);
swap(&arr[i], &arr[j]);
}
}
void bubbleSortV1() {//lenta(n^2)
for (size_t i = 0;i <= id-1;++i) {
for (size_t j = 0;j <= id - 1;++j) {
if (arr[j] > arr[j + 1])
swap(&arr[j], &arr[j + 1]);
}
}
}
void bubbleSortV2() {//Promedio(n(n-1)/2)
for (size_t i = 0;i <= id - 1;++i) {
for (size_t j = 0;j <= id - 1-i;++j) {//reducir la cantidad de comparaciones en cada iteracion
if (arr[j] > arr[j + 1])
swap(&arr[j], &arr[j + 1]);
}
}
}
void bubbleSortV3() {//Optimo(n(n-1)/2)
bool sorted;
for (size_t i = 0;i <= id - 1;++i) {
sorted = true;//supuesto que esta ordenado
for (size_t j = 0;j <= id - 1 - i;++j) {//reducir la cantidad de comparaciones en cada iteracion
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
sorted = false;
}
}
if (sorted)break;
}
}
void bubbleSortV4(function<bool(G,G)> func) {//Optimo(n(n-1)/2)
bool sorted;
for (size_t i = 0;i <= id - 1;++i) {
sorted = true;//supuesto que esta ordenado
for (size_t j = 0;j <= id - 1 - i;++j) {//reducir la cantidad de comparaciones en cada iteracion
if (func(arr[j],arr[j + 1])) {
swap(&arr[j], &arr[j + 1]);
sorted = false;
}
}
if (sorted)break;
}
}
void iterate(function<void(G)> func)
{
for (int i = 0; i <= id; i++)
func(arr[i]);
}
void push_back(G v) {arr[++id] = v;
//incrementar
}
};
struct Real {
unsigned short entera;
unsigned short decimal;
Real(unsigned short entera=0, unsigned short decimal=0) :entera(entera), decimal(decimal) {}
};
class Persona {
public://TO-DO
string nombre;
unsigned short edad;
Persona(string nombre="", unsigned short edad=20) :nombre(nombre), edad(edad) {}
};
int main()
{ srand(time(NULL));
Vector<int> vEnteros(25);
for (int i = 0;i < 25;++i)
vEnteros.push_back(i);
vEnteros.iterate([](int v) {printf("%d ", v);});
printf("\n");
vEnteros.randomize();
vEnteros.iterate([](int v) {printf("%d ", v);});
printf("\n");
vEnteros.bubbleSortV4([](int v1, int v2) {return v1 > v2;});
vEnteros.iterate([](int v) {printf("%d ", v);});
printf("\n");
//----------------------------------------------
Vector<Real> vReal(15);
for (int i = 0;i < 15;++i)
vReal.push_back(Real(i, rand()));
vReal.iterate([](Real v) {printf("(%d,%d)\n", v.entera,v.decimal);});
printf("\n");
vReal.randomize();
vReal.iterate([](Real v) {printf("(%d,%d)\n", v.entera, v.decimal);});
printf("\n");
vReal.bubbleSortV4([](Real v1, Real v2) {return v1.entera > v2.entera;});
vReal.iterate([](Real v) {printf("(%d,%d)\n", v.entera, v.decimal);});//imprimir
vReal.iterate([](Real v) {if (v.entera > 0)std::cout << v.entera;});//comparar
vReal.iterate([](Real v) {if (v.entera == 10) std::cout << v.entera;});//busqueda
printf("\n");
//----------------------------------------------
Vector<Persona> vPersonas(3);
vPersonas.push_back(Persona("Luis", 19));
vPersonas.push_back(Persona("Barbara", 17));
vPersonas.push_back(Persona("Shayla", 18));
vPersonas.iterate([](Persona v) {std::cout << v.nombre << "-" << v.edad << "\n";});
//vPersonas.bubbleSortV4([](Persona v1, Persona v2) {return v1.nombre.compare(v2.nombre)>0;});
vPersonas.bubbleSortV4([](Persona v1, Persona v2) {return v1.edad>v2.edad;});
std::cout << "\n\n";
vPersonas.iterate([](Persona v) {std::cout<<v.nombre<<"-"<<v.edad<<"\n";});
cin.ignore();
cin.get();
return 0;
}